doLayout和'Java Play!'中的模板包含有什么区别?

时间:2010-12-17 20:34:33

标签: java templates playframework

使用doLayout进行扩展时,您只能拥有一个子模板,但可以include多个子模板。

有什么区别,最佳做法是什么?

2 个答案:

答案 0 :(得分:6)

它们彼此相反。

doLayout用作extends标记的一部分。 extends标记指定您希望扩展的模板,doLayout标记指定扩展模板中注入代码的位置。

include标记只是指定应在指定的位置注入另一个模板。

因此,doLayout以类似的方式工作,除了doLayout标记没有指定注入哪个模板。这是由extends标签完成的,这意味着模板(通常包含页眉,页脚和常见的css和javascript)可以扩展,而不需要知道任何有关扩展它的模板的信息。

Include,只是一个愚蠢的代码注入。

如果你想用include实现doLayout功能(这是用PHP或类似的方式实现的话),你可以做到

#{include 'header.html'}
your template code
#{include 'footer.html'}

这必须在模板中的每个页面上进行复制。使用extendsdoLayout可以让您简单地执行

#{extends 'template.html'}

将代码注入template.html的位置由doLayout标记管理。

扩展方法只是一种更简洁的方法。此外,如果您决定更改页面布局,则只需更新一个文件,并在内容位于扩展模板中的位置提供更大的灵活性。

答案 1 :(得分:4)

google-group我发现了extends (doLayout), include and a tag

之间的差异

扩展和包含是相似的,区别主要在于你的方式 传递变量

使用extend,父模板提供样板和子代 模板提供“身体”。例如,父模板可以呈现一个 页眉和页脚,子模板可以呈现主要内容 这页纸。您通常在子模板中设置读取的变量 并应用于父模板,例如#{set title:'Pet shop' /}#{set showLoginBox:true /}

当你想在a内多次做同样的事情时,你使用include 单亲模板。例如 #{include 'formStatusFields.html' /} 父模板中的变量可用于包含的模板。

如果您有一段从多个执行的模板代码 不同的父模板,您应该使用标签。您可以将变量传递给 一个标签。例如 #{button label:'Ok', id:'ok-button'}