我想在play 2中定义一些模板,它将另一个模板作为参数:
@aTemplate(otherTemplate())
我认为scala应该可行,对吧?
otherTemplate()
中的参数定义怎么样?我也应该有一个默认值。我在想这样的事情:
@(template: PlayScalaViewTemplate = defaultTemplate())
谢谢!
答案 0 :(得分:4)
是的,你可以。一旦发现Play模板只是功能,它就非常简单。
高阶模板(将简单模板作为参数的模板)看起来像这样:
<强> higherOrder.scala.html:强>
@(template: Html => Html)
<html>
<head><title>Page</title></head>
<body>
@template {
<p>This is rendered within the template passed as parameter</p>
}
</body>
</html>
所以,如果你有一个简单的子模板,比如
<强> simple.scala.html:强>
@(content: Html)
<div>
<p>This is the template</p>
@content
</div>
您可以在控制器中应用模板,如下所示:
def index = Action {
Ok(views.html.higherOrder(html => views.html.simple(html)))
}
结果将是:
<html>
<head><title>Page</title></head>
<body>
<div>
<p>This is the template</p>
<p>This is rendered within the template passed as parameter</p>
</div>
</body>
</html>
因此,scala模板最终是函数,因此您可以像函数一样组合它们。