我有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丢失了执行脚本代码所需的库。
答案 0 :(得分:1)
由 @joshua 评论此调用返回的视图:
<g:include controller='controllername' action='custom'/>
必须是片段,而不是带有html, head ..
标记的整个gsp视图。
在使用g:include
包含观看时,如果您有HomeController
和NewsController
(请参见下图),并希望将NewsController's
视图包含在{{{}中,请考虑这一点1}}查看,
您必须在HomeController's
上定义一项仅返回您在图中看到的NewsController
的操作。为此,您可以保留content fragment
视图,但重构方式是将内容部分放在新模板(news.gsp
)中。我希望你明白我的意思,但如果我的例子中有些不明确的话,请留言。