В 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>
Я не знаю, хорошо ли это или рекомендуется, есть ли лучшее решение для этого?