【问题标题】:What is is causing the script block in the html head of a gsp to be overwritten是什么导致 gsp 的 html 头中的脚本块被覆盖
【发布时间】:2015-07-25 00:08:55
【问题描述】:

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

index.gsp & custom.gsp

两个页面在<head> 中都有一个<script> 块。我希望能够直接转到 custom.gsp 或使用 index.gsp 的选项卡中的内容。

我正在包含 custom.gsp 内容,使用:

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

似乎 custom.gsp 的 &lt;script&gt; 块正在覆盖 index.gsp 的 &lt;script&gt; 块。如果我删除了include,索引页面上的其他所有内容都会正常运行。如果我添加include,则不会执行 index.gsp 的&lt;script&gt; 块中的代码,并且经过检查似乎不存在。

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

更新

我已尝试将 custom.gsp 中的代码从 &lt;script&gt; 块中移出并放入单独的 javascript 文件中。然而;当包含现在发生时,它仍然将代码作为&lt;script&gt; 块拉入并替换旧的。

我尝试将每个块的块移动到正文中,并尝试为每个块添加 id 属性,也许 sitemesh 可能会将其视为一个独特的块。还是没有运气。

更新 #2

我尝试将其添加到 index.gsp 的正文中:

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

文本this is a script 可见但脚本不见了!

更新 #3

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

【问题讨论】:

  • 你有一个根本问题。您应该只使用include HTML 片段,例如templates 而不是完整的页面或完整的 GSP。

标签: grails gsp sitemesh


【解决方案1】:

正如 @joshua 所评论的,此调用返回的视图:

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

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

在使用g:include 包含视图时考虑这一点,如果您有HomeController 和NewsController(请查看下图),并且您希望在HomeController's 视图中包含NewsController's 视图,

您必须在 NewsController 上定义一个操作,该操作将仅返回您在图中看到的 content fragment。为此,您可以保留 news.gsp 视图,但将其重构为将内容部分放入新模板 (content fragment)。我希望你明白我的意思,但是如果我的例子有什么不清楚的地方,请发表评论。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-09
    • 2012-02-10
    • 2020-02-21
    相关资源
    最近更新 更多