最佳答案
在 play1中,我通常在操作中获取所有数据,直接在视图中使用它们。因为我们不需要在 view 中显式声明参数,所以这非常简单。
但是在 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
中的一个参数,如果有很多参数怎么办?
So at last, I decided to all Menu.findAll()
directly in view:
@(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>
我不知道它是好的还是推荐的,有没有更好的解决方案?