模板继承冲突(同一页面中的多个doLayout)

时间:2013-02-28 14:06:49

标签: templates inheritance playframework playframework-1.x

我对play-framwork(1.2.4)有一个小问题。 我希望标签继承另一个标签,这个标签包含在扩展另一个网页的html页面中。解释的最佳方式是使用模式:

wanted architecture

但是,它没有按我想要的方式工作。事实上,test.tag文件中的扩展似乎覆盖了Screen.html中的扩展。然后,所有Screen.html的内容都包含在block.tag #{doLayout /}中,而不是main.html中的内容

有什么办法可以做我想要的吗? 感谢。


以下是来源:

main.html中

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
    <body>
    #{doLayout /}
    </body>
</html>

Screen.html

#{extends 'main.html' /}
<div id="Screen.html">
    #{test  /}
</div>

test.tag

#{extends 'tags/block.tag' /}
test.tag

block.tag

<div id="test">
    #{doLayout /}
</div>

调用页面时生成的html

<div id="test">
    <div id="Screen.html">
        test.tag
    </div>
</div>

如您所见,未包含main.html,并且屏幕包含在块中。有什么想法吗?


有关信息,需要的输出:

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
    <body>
        <div id="Screen.html">
            <div id="test">
                test.tag
            </div>
        </div>
    </body>
</html>

2 个答案:

答案 0 :(得分:1)

您可以尝试在模板中使用#{extends /},但不要在标记中使用它们。

为了更灵活地在另一个标签之上构建标签,您可以这样做:

test.tag:

#{block }
test.tag
#{/block}

和block.tag:

<div id="test">
#{doBody /}
</div>

有了这个,你将身体的一部分从test.tag传递给block.tag并使用#{doBody /}将其插入block.tag中的某个地方

答案 1 :(得分:0)

我认为这可能是由于Groovy引擎对运行时进行#{extends}评估,screen.html调用test.tag反过来扩展block.tag,这在屏幕扩展到{后发生{1}}并且在运行时,groovy决定最后的延伸胜利。

可能你想尝试在解析时评估main.html语义的rythm plugin。这就是说你的情况没有问题。