下面是一个简单的main.scala.html模板。
@import services.UserProvider
@(userProvider: UserProvider)
<!DOCTYPE html>
<html lang="@lang().code()">
<head>
</head>
@defining(userProvider.getUser(session())) { user =>
<body>
<main id="main-container">
<div class="content">
@content
</div>
</main>
</body>
}
</html>
我使用@defining定义了一个用户变量。在我从main.scala.html继承的所有子模板中,有没有办法访问这个“user”变量,而不必重复调用@defining(userProvider.getUser(session())))(如图所示)在下面的儿童模板中)?
@import services.UserProvider
@(userProvider: UserProvider, model: MyModel)
@main(userProvider, model) {
@defining(userProvider.getUser(session())) { user =>
<div class="block-content">
@views.html.foo.list._filter(user, model)
</div>
<div>
@_showingBarPartial(user, model)
@views.html.foo.list._table(model, user)
</div>
}
}
我在整个项目中都有这个代码片段,我正在尝试确定这是否必要和/或是否会导致问题。看起来,我已经在主(父)模板中定义了一次,为什么不重用它而不必在子模板中重新使用它。
感谢您的任何建议。
答案 0 :(得分:1)
你能考虑使用scala implicit
吗?
定义
implicit val user: User = userProvider.getUser(session())
然后在每个模板中你将引用来自父闭包的隐式,诀窍是你必须通过每个模板传递对隐式的引用:
<强> main.scala.html 强>
@(model: MyModel)(implicit val user: User)
@main(userProvider, model) {
<div class="block-content">
@views.html.foo(model)
...
<强> foo.scala.html 强>
@(model: MyModel)(implicit val user: User)
@user.name is logged in @* <--- using the implicit in a child template *@