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