2016-12-09 29 views
0

我有一個控制器類,如下如何調用控制器類中發揮框架2.5

class MenuAccessor @Inject() extends securesocial.core.SecureSocial{ 
    def findAllMenus(): List[Menu] = { 
    MorphiaHelper.datastore.find(classOf[Menu]).order("+order").toList 
    } 
} 

我用來直接調用它在發揮2.3.x版本的意見

@for(menu <- MenuAccessor.findAllMenus()) { 
        <li class="@menu.menuliclass"> 
意見

這是否意味着我必須創建路線才能在遊戲2.5中調用它?

回答

0

只有當您想要鏈接到該操作(即反向路由)時,路由纔會對您有所幫助。

你想從一些靜態方法獲取數據 - 然後從模板中調用它。像這樣的東西(不要忘了包):

object MenuAccessor{ 
    def findAllMenus(): List[Menu] = { 
    MorphiaHelper.datastore.find(classOf[Menu]).order("+order").toList 
    } 
} 

.... 

@for(menu <- MenuAccessor.findAllMenus()) { 
       <li class="@menu.menuliclass"> 

不過,我更喜歡傳遞參數as it described in the documentation

@(products: List[Product]) 

<ul> 
@for(p <- products) { 
    <li>@p.name ([email protected])</li> 
} 
</ul> 

播放2.5是所有關於注射,所以從靜態物體或功能得到了一些數據對未來不是一個好主意。更好地重構代碼以將數據作爲參數傳遞到模板中。

如果你想「以避免在play2處處傳遞參數」,然後看這個很好的答案How to avoid passing parameters everywhere in play2?(它的老,但仍然可用)