将模板中的可重用块包含到另一个模板中

Beh*_*nil 5 playframework-2.0

我想在我的另一个模板中使用模板中的可重用块.我怎样才能做到这一点?进一步来说:

我有一个包含此标记的模板views/main.scala.html

@logo_header = {
    <div id="logo-container">
       ...
    </div>
}
Run Code Online (Sandbox Code Playgroud)

我有另一个模板views/errors/notFound.scala.html我想在主模板中包含logo_header标签.我尝试@ main.logo_header或@ main.logo_header(),但编译总是说:

value logo_header不是对象views.html.main的成员

我查看了他们描述的官方文档,但我无法理解为什么它不起作用.

avi*_*vik 5

您已完成与文档中提到的用法略有不同的操作.在文档中,可重用标记在其自己的文件中声明.你要做的是在一个视图模板中声明一个辅助函数,然后尝试从另一个模板调用它.如本回答所述,函数仅对声明它的视图模板可见.

您需要做的是将徽标标记标记移动到其自己的文件中:

意见/ _logo_header.scala.html

<div id="logo-container">
   ...
</div>
Run Code Online (Sandbox Code Playgroud)

然后参考如下:

意见/ main.scala.html

<html>
    ...
    _logo_header
    ...
</html>
Run Code Online (Sandbox Code Playgroud)

我给新文件一个带有前导下划线的名称,因为这是一个常见的命名约定,它将文件标记为包含HTML片段而不是完整的HTML文档.

最后,我假设您的徽标标题代码段不需要接受任何参数.如果是这样,你可以在文档中提到的一些Scala中撒上:

意见/ _logo_header.scala.html

@(arg1: String, arg2: String)
<div id="logo-container">
   ...
</div>
Run Code Online (Sandbox Code Playgroud)

意见/ main.scala.html

<html>
    ...
    _logo_header("foo", "bar")
    ...
</html>
Run Code Online (Sandbox Code Playgroud)

  • 但是他们在示例中调用@ common.sideBar()而不是@common(某事),所以在我看来,他们调用common的函数. (3认同)