【问题标题】:Including reusable blocks from a template into another template将模板中的可重用块包含到另一个模板中
【发布时间】:2013-04-27 19:11:57
【问题描述】:

我想在我的另一个模板中使用模板中的可重用块。我怎样才能做到这一点?更具体地说:

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

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

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

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

我查看了官方documentation 他们描述的内容,但我不明白为什么它不起作用。

【问题讨论】:

    标签: playframework-2.0


    【解决方案1】:

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

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

    views/_logo_header.scala.html

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

    然后引用如下:

    views/main.scala.html

    <html>
        ...
        _logo_header
        ...
    </html>
    

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

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

    views/_logo_header.scala.html

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

    views/main.scala.html

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

    【讨论】:

    • 所以基本上,当我需要模板的可重用 html 组件(页眉、页脚、徽标)时,我必须为每个模板创建自己的模板??
    • @Behnil - 是的,据我所知。
    • 谢谢@avik。我有最后一个问题。 view/tags 文件夹有什么特别之处吗?还是他们只是在文档中选择它?
    • 不,这并不特别。您所有的视图模板都需要放在views 包中,但在views 下,您可以定义子包并按照您的选择组织您的模板。
    • 但他们在示例中调用@common.sideBar() 而不是@common(something),所以在我看来,他们调用common 的函数。
    猜你喜欢
    • 2015-11-30
    • 2018-02-02
    • 1970-01-01
    • 2021-06-23
    • 1970-01-01
    • 2019-04-09
    • 2012-08-15
    • 2019-02-23
    • 1970-01-01
    相关资源
    最近更新 更多