是什么导致gsp的html头中的脚本块被覆盖

时间:2015-05-13 15:30:49

标签: grails gsp sitemesh

我有2个grails视图,它们都引用相同的布局:

  

index.gsp &的 custom.gsp

这两个页​​面在<script>中都有一个<head>块。我希望能够直接转到 custom.gsp ,或者使用 index.gsp 标签中的内容。

我使用

包含 custom.gsp 内容
<g:include controller='controllername' action='custom'/>

似乎 custom.gsp <script>块正在覆盖 index.gsp <script>块。如果我删除include索引页面上的其他所有内容都正常运行。如果我添加include index.gsp <script>块中的代码未执行,并且在检查时似乎没有。

这里到底发生了什么,为什么?我怎么能以不同的方式构建事物,以免发生这种情况?

更新

我尝试将 custom.gsp 中的代码移出<script>块并转移到单独的javascript文件中。然而;当包含发生时,它仍然将代码作为<script>块拉出并替换旧的。

我已经尝试将每个块的块移动到体内而我尝试将id属性添加到每个思考中,也许sitemesh可能会将其视为一个独特的块。仍然没有运气。

更新#2

我尝试将其添加到 index.gsp

的正文中
<div>this is a script
    <script type="application/javascript">
        var xyz='xyz';
    </script>
</div>

文本this is a script可见,但脚本消失了!

更新#3

更新#2错误,文本可见,但脚本实际上也存在。我想到它已经消失了,因为我观察的行为与它消失时的行为相同。然而;真正的问题是index.gsp的整个头部被包含的页面头部替换,因此index.gsp丢失了执行脚本代码所需的库。

1 个答案:

答案 0 :(得分:1)

@joshua 评论此调用返回的视图:

<g:include controller='controllername' action='custom'/>

必须是片段,而不是带有html, head ..标记的整个gsp视图。

在使用g:include包含观看时,如果您有HomeControllerNewsController(请参见下图),并希望将NewsController's视图包含在{{{}中,请考虑这一点1}}查看,

enter image description here

您必须在HomeController's上定义一项仅返回您在图中看到的NewsController的操作。为此,您可以保留content fragment视图,但重构方式是将内容部分放在新模板(news.gsp)中。我希望你明白我的意思,但如果我的例子中有些不明确的话,请留言。