playframework-2.0 - 将模板中的可重用 block 包含到另一个模板中

标签 playframework-2.0

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

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

@logo_header = {
    <div id="logo-container">
       ...
    </div>
}

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

value logo_header is not a member of object views.html.main



我看过官方documentation他们描述的地方包括,但我不明白为什么它不起作用。

最佳答案

您所做的与文档中提到的用法略有不同。在文档中,可重用标签在其自己的文件中声明。您要做的是在一个 View 模板中声明一个辅助函数,然后尝试从另一个模板调用它。如 this answer 中所述, 一个函数只对声明它的 View 模板可见。

您需要做的是将您的 Logo 标题标记移出到它自己的文件中:

View /_logo_header.scala.html

<div id="logo-container">
   ...
</div>

然后引用如下:

View /main.scala.html
<html>
    ...
    _logo_header
    ...
</html>

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

最后,我假设您的 Logo 标题片段不需要接受任何参数。如果是这样,您可以按照文档中的说明添加一些 Scala:

View /_logo_header.scala.html
@(arg1: String, arg2: String)
<div id="logo-container">
   ...
</div>

View /main.scala.html
<html>
    ...
    _logo_header("foo", "bar")
    ...
</html>

关于playframework-2.0 - 将模板中的可重用 block 包含到另一个模板中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16250612/

相关文章:

Java Play2 - 通用模板?

scala - 在对象中注入(inject)依赖项

scala - playframework2 和 Scala - 如何从 IDEA 启动测试?

java - Ebean + ManyToMany 加入

java - 持久性不适用于 Play Framework 2 中的 Ebeans

playframework-2.0 - 如何在 Play 中处理 MultiTimeZone 和本地时间/日期

javascript - 通过 Websockets 上传文件到 Play Framework 2.0

java - 如何在连接 JPA/Ebean 上定义多个条件

java - 使用 Ajax 或 JQuery 直接上传文件(带或不带表单)

scala - 使用 scala/play 将 HOCON (.conf) 转换为 JSON?