如何避免在play2中到處傳遞參數?在play1中,我通常會在操作中獲取所有數據,直接在視圖中使用它們。由于我們不需要在視圖中顯式聲明參數,因此這非常簡單。但是在play2中,我發現我們必須request在視圖的頭部聲明所有參數(包括),在動作中獲取所有數據并將它們傳遞到視圖中會非常無聊。例如,如果我需要顯示從首頁的數據庫加載的菜單,我必須在以下位置定義main.scala.html:@(title: String, menus: Seq[Menu])(content: Html) <html><head><title>@title</title></head><body>
<div>
@for(menu<-menus) {
<a href="#">@menu.name</a>
}
</div>
@content</body></html>然后我必須在每個子頁面中聲明它:@(menus: Seq[Menu])@main("SubPage", menus) {
...}然后我必須得到菜單并傳遞給每個動作查看:def index = Action {
val menus = Menu.findAll()
Ok(views.html.index(menus))}def index2 = Action {
val menus = Menu.findAll()
Ok(views.html.index2(menus))}def index3 = Action {
val menus = Menu.findAll()
Ok(views.html.index(menus3))}現在它只有一個參數main.scala.html,如果有很多,怎么辦?所以最后,我決定Menu.findAll()直接看到所有人:@(title: String)(content: Html) <html><head><title>@title</title></head><body>
<div>
@for(menu<-Menu.findAll()) {
<a href="#">@menu.name</a>
}
</div>
@content</body></html>我不知道它是好還是推薦,有沒有更好的解決方案呢?
3 回答

喵喔喔
TA貢獻1735條經驗 獲得超5個贊
我這樣做的方法是為我的導航/菜單創建一個新的控制器,并從視圖中調用它
所以你可以定義你的NavController
:
object NavController extends Controller { private val navList = "Home" :: "About" :: "Contact" :: Nil def nav = views.html.nav(navList)}
nav.scala.html
@(navLinks: Seq[String])@for(nav <- navLinks) { <a href="#">@nav</a>}
然后在我的主視圖中我可以稱之為NavController
:
@(title: String)(content: Html)<!DOCTYPE html><html> <head> <title>@title</title> </head> <body> @NavController.nav @content </body></html>
添加回答
舉報
0/150
提交
取消