如何避免在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>
我不知道它是好还是推荐,有没有更好的解决方案呢?
喵喔喔