Как избежать передачи параметров везде в 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>

Я не знаю, хорошо это или рекомендуется, есть ли лучшее решение для этого?

Ответы на вопрос(5)

Ваш ответ на вопрос