Grails中使用remoteLink的动态参数

Grails中使用remoteLink的动态参数,grails,Grails,我想使用remoteLink(Prototype作为Javascript库)进行Ajax调用,但我需要传递一个参数作为textfield的值。以下是我目前在普惠制中的情况: <input id="email" name="email" type="text"/> ... <g:remoteLink action="addEmail" params="[email:???]">Add</g:remoteLink> 代替???但我的GSP中出现了“无法解析脚本”

我想使用remoteLink(Prototype作为Javascript库)进行Ajax调用,但我需要传递一个参数作为textfield的值。以下是我目前在普惠制中的情况:

<input id="email" name="email" type="text"/>
...
<g:remoteLink action="addEmail" params="[email:???]">Add</g:remoteLink>
代替???但我的GSP中出现了“无法解析脚本”错误


谢谢

添加
添加
如果您可以使用按钮而不是链接,那么使用g:submitToRemote将变得很简单。但是,如果它必须是一个链接,你可以这样做:

视图/email/index.gsp:

<%@ page contentType="text/html;charset=UTF-8" %>

<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Sample title</title>
    <g:javascript library="prototype" />
  </head>
  <body>
  <g:form name="theForm">
    Email: <g:textField name="emailAddr" />
    <!-- Here comes the ugly -->
    <a href="#" name="submit" 
       onclick="new Ajax.Updater('resp','${createLink(action:'addEmail')}',{asynchronous:true,evalScripts:true,parameters:Form.serialize(document.theForm)});return false">
    Submit Form
    </a>
  </g:form>
  <div id="resp">
  </div>
  </body>
</html>
如果您自定义此项,请注意以下几点: *Updater的第一个'resp'参数是要更新的div的id
*在Form.serialize(document.theForm)命令中,“theForm”需要与您分配给表单的名称相对应。

如果您可以使用按钮而不是链接,那么使用g:submittomote将变得很简单。但是,如果它必须是一个链接,你可以这样做:

视图/email/index.gsp:

<%@ page contentType="text/html;charset=UTF-8" %>

<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Sample title</title>
    <g:javascript library="prototype" />
  </head>
  <body>
  <g:form name="theForm">
    Email: <g:textField name="emailAddr" />
    <!-- Here comes the ugly -->
    <a href="#" name="submit" 
       onclick="new Ajax.Updater('resp','${createLink(action:'addEmail')}',{asynchronous:true,evalScripts:true,parameters:Form.serialize(document.theForm)});return false">
    Submit Form
    </a>
  </g:form>
  <div id="resp">
  </div>
  </body>
</html>
如果您自定义此项,请注意以下几点: *Updater的第一个'resp'参数是要更新的div的id
*在Form.serialize(document.theForm)命令中,“theForm”需要与您分配给表单的名称相对应。

我以前也做过类似的事情,以下几点对我很有用(是的,不是特别优雅):


...
var addEmail=函数()
{
${remoteFunction(操作:“addEmail”,更新:“更新元素id”,参数:“'email='+$('email').value”)}
};

为了清晰起见,将其提取到javascript函数中,并在参数中添加了一些空格,以更清晰地显示单引号。

我以前也需要做类似的事情,以下几点对我很有用(是的,不是特别优雅):


...
var addEmail=函数()
{
${remoteFunction(操作:“addEmail”,更新:“更新元素id”,参数:“'email='+$('email').value”)}
};

为了清晰起见,将其提取到javascript函数中,并在参数中添加了一些空格,以更清晰地显示单引号。

有更好的解决方案

在remoteLink标记中使用before属性设置包含DOM内容的js变量

例如: 在js中:

在普惠制中:

<g:remoteLink action="addEmail" params="MyJSClass.dynamicParams" before="MyJSClass.setParams()">Add</g:remoteLink>
添加

请参阅before代码,该代码是在请求之前执行的js函数,并设置随后将在AJAX请求中使用的dynamicParams属性

有一个更好的解决方案

在remoteLink标记中使用before属性设置包含DOM内容的js变量

例如: 在js中:

在普惠制中:

<g:remoteLink action="addEmail" params="MyJSClass.dynamicParams" before="MyJSClass.setParams()">Add</g:remoteLink>
添加

请参阅before代码,该代码是在请求之前执行的js函数,并设置随后将在AJAX请求中使用的dynamicParams属性

根据Eduard的回答,我推断将执行params属性中的Javascript代码。因此,我尝试了以下方法,效果良好:

<g:remoteLink action="addEmail" params="{email:\$('#email').val()}">Add</g:remoteLink>
添加

根据Eduard的回答,我推断将执行params属性中的Javascript代码。因此,我尝试了以下方法,效果良好:

<g:remoteLink action="addEmail" params="{email:\$('#email').val()}">Add</g:remoteLink>
添加

如果您想将remoteLink与Jquery结合使用,以下是对我有效的方法

<g:remoteLink action="${myBean.action}" params="[myParam: myBean.param]" update="updateDiv">
        My Awesome Link
</g:remoteLink>

我最棒的链接

简单而整洁。

如果您想将remoteLink与Jquery结合使用,下面是我的工作原理

<g:remoteLink action="${myBean.action}" params="[myParam: myBean.param]" update="updateDiv">
        My Awesome Link
</g:remoteLink>

我最棒的链接

简单整洁。

这比我概述的方式要好;它允许您在不破坏实现的情况下从原型切换到其他对象。好的建议,向上投票。如果移动var emailVal=$('email')。值;函数内部的行这工作得非常好。你能改变一下你的答案吗?我会接受的。谢谢,完成了。thx对于up proflux,希望有一种更优雅的方式让gsp和javascript进行交互,我猜一个是服务器,另一个是客户端很难……这比我概述的方式要好;它允许您在不破坏实现的情况下从原型切换到其他对象。好的建议,向上投票。如果移动var emailVal=$('email')。值;函数内部的行这工作得非常好。你能改变一下你的答案吗?我会接受的。谢谢,完成了。thx对于up proflux,希望有一种更优雅的方式让gsp和javascript进行交互,猜测一个是服务器,另一个是客户端……这段代码是错误的,你不能有“some.groovy.to.get.your.email”,因为在显示页面和键入email字段之前,该代码在服务器上呈现。填充电子邮件字段后,需要在客户端上执行js代码。此代码错误,不能使用“some.groovy.to.get.your.email”,因为该代码在显示页面和键入电子邮件字段之前在服务器上呈现。填充电子邮件字段后,您需要在客户端上执行js代码。这如何解决在呈现页面后向params添加用户插入的文本字段值的问题?如果我理解正确,您希望使用用户输入的参数(字段)。你可以用它来做那件事。我也有同样的问题,submitToRemote实际上提交了整个表单,因此您可以添加一个小表单,然后通过链接/按钮提交。登录:还有一种情况是,您已经有一个表单和一个提交按钮,但还有一个远程链接需要传递一些参数,我在同一表单中使用了这两个参数。。我有这样的东西
Previous
这将完全正常工作。这如何解决在呈现页面后向params添加用户插入的文本字段值的问题?如果我理解正确,您希望使用用户输入的参数(字段)。你可以用它来做那件事。我也有同样的问题,苏