模板作为播放2视图中的模板参数

时间:2013-05-24 12:42:03

标签: scala playframework playframework-2.1

我想在play 2中定义一些模板,它将另一个模板作为参数:

@aTemplate(otherTemplate())

我认为scala应该可行,对吧?

otherTemplate()中的参数定义怎么样?我也应该有一个默认值。我在想这样的事情:

@(template: PlayScalaViewTemplate = defaultTemplate())

谢谢!

1 个答案:

答案 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模板最终是函数,因此您可以像函数一样组合它们。