【问题标题】:Grails/AJAX: Updating an arbitrary region in the page using g:submitToRemoteGrails/AJAX:使用 g:submitToRemote 更新页面中的任意区域
【发布时间】:2011-04-29 20:35:54
【问题描述】:

在 GSP(Groovy 服务器页面)中,我使用 <g:submitToRemote update="..."> 在服务器端调用后更新 <div>

根据标签的documentation和网络上的其他来源,目标<div>可以任意放置在页面上。然而,在我的测试中,我发现<div> 需要围绕<g:submitToRemote> 标签。

如果是<div> 将更新为一些“随机”内容(即,围绕<g:submitToRemote> 标记的表单的部分) .

考虑以下 GSP 代码:

<html>
<head>
    <g:javascript library="prototype" />
</head>
<body>

<div id="updateMe_NOT_WORKING">${message}</div>

<g:form>
    <div id="updateMe_WORKING">
        <g:submitToRemote value="Click Me"
            action="someAction" update="updateMe_NOT_WORKING" />
    </div>
</g:form>

</body>
</html>

这是在 Grails 1.3.4 上。
我错过了什么? - 谢谢

【问题讨论】:

    标签: ajax grails gsp


    【解决方案1】:

    根据我的测试,g:submitToRemoteaction 属性必须指向 当前控制器的当前操作(因为这将插入/复制当前视图进入当前视图)。

    如果您在 g:submitToRemote 中指定 alternate 操作,它会起作用 - 即,

    <g:submitToRemote value="Click Me"
        action="ajaxAction" update="updateMe" />
    

    如果此操作提供 模型 - 即,

    def ajaxAction = { [message: 'foo'] }
    

    那么就需要有一个相应的 GSP - 在这种情况下,应该说明,

    $message
    

    或者,操作可以使用render 方法 - 像这样,

    def ajaxAction = { render 'foo' }
    

    我将把这个问题留待一段时间,以防有其他回应,如果没有,我会接受这个答案作为解决方案。

    谢谢

    【讨论】:

      【解决方案2】:

      我认为问题在于您没有为您的操作指定控制器。尝试将 controller="..." 添加到您的 g:submitToRemote 标记中。或者至少在 g:form 中指定它。

      我确定 &lt;div&gt; 不需要包装。

      【讨论】:

      • 感谢您的回答 [+]。 - 这让我更深入地研究了这个问题。 - controller 属性实际上并没有什么不同,但它是 action 属性(它必须引用一个不是 当前 的动作,加上涉及的某些附加条件)。跨度>
      • 是的,对于不熟悉 Grails 中的 MVC 的开发人员来说,这是一个常见的问题。我为此困扰了很长时间。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-08
      • 2013-03-31
      相关资源
      最近更新 更多