首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Grails资源插件和AJAX加载的javascript

Grails资源插件和AJAX加载的javascript
EN

Stack Overflow用户
提问于 2012-01-05 08:55:16
回答 3查看 7.7K关注 0票数 17

我在grails 1.3.7应用程序中添加了resources插件,除了异步加载的javascript之外,一切都很正常。

因此,如果我有一个包含

代码语言:javascript
复制
<r:script>
    // javascript here
</r:script>

并通过ajax加载它,js代码不会执行,我得到了这个错误:

看起来您遗漏了一些对r:layoutResources标记的调用

这是有意义的,因为页面已经呈现,并且没有r:layoutResources来处理新添加的r:script js代码。

我发现的唯一解决办法是在异步呈现内容的控制器操作中,在实际render(template:...)之后添加render r.layoutResources(disposition:"defer")

有没有其他更清晰的解决方案?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-01-06 19:10:49

一种更好的方法是为AJAX响应提供一个专用的布局:

代码语言:javascript
复制
<g:layoutBody/>
<r:layoutResources disposition="defer"/>

如果您使用的是Grails2.0,那么可以在render方法(render template: "...", layout: "ajax")中指定布局。否则,按约定使用layout。

票数 18
EN

Stack Overflow用户

发布于 2012-01-06 19:31:02

我认为一个更好的选择是不在模板片段中使用r:script。只需使用普通脚本标记即可。如果您不需要layoutResources的东西,那么您不会从这些片段中的资源中获得任何好处。

有时经典的方法是最好的。

票数 4
EN

Stack Overflow用户

发布于 2013-05-03 16:32:52

我总是使用Peter Ledbrook response,但我不使用布局,而是使用模板,并自动在主布局中呈现什么。我的main.gsp如下所示:

代码语言:javascript
复制
<!DOCTYPE html>
<g:if test="${request.xhr}">
    <g:render template="/layouts/content" />
</g:if>
<g:else>
    <html>
   ...  <!-- Main layout stuff: application resources, logo, main menu, etc -->
   <div id="content">  <!-- Somewhere in the body -->
          <g:render template="/layouts/content" />
       </div>
    </html>
</g:else>

然后,_content.gsp模板如下所示:

代码语言:javascript
复制
<g:layoutBody />
<r:layoutResources disposition="defer"/>
<!-- Ajaxify your relative links with the framework of your choice -->

这样,我就可以自动地将所有相对链接和表单进行ajax化,并且不需要在控制器中执行任何操作(没有不同的响应),因为ajax响应总是放在content div中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8736277

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档