[英]Dynamic params using remoteLink in Grails
我想使用remoteLink(以Prototype作为Javascript库)进行Ajax调用,但是我需要传递一个参数作为文本字段中的值。 到目前为止,我的GSP内容如下:
<input id="email" name="email" type="text"/>
...
<g:remoteLink action="addEmail" params="[email:???]">Add</g:remoteLink>
我要代替??? 获取remoteLink以将电子邮件文本字段的值作为参数发送? 本质上,如何在Grails标记中引用/访问DOM?
我试过
\$('email').value
代替??? 但是我的GSP中出现“无法解析脚本”错误。
谢谢
我之前需要做一些类似的事情,以下对我有用(是的,不是特别优雅):
<input id="email" name="email" type="text"/>
...
<g:javascript>
var addEmail = function()
{
${ remoteFunction (action:"addEmail", update:"update-element-id", params:" 'email=' +$('email').value ") }
};
</g:javascript>
<a href="javascript:void(0)" onclick="addEmail();return false;">add email</a>
为清晰起见,提取到javascript函数,并在参数内添加了一些空格,以使单引号更清晰。
<g:remoteLink action="addEmail" params="${[email: some.groovy.to.get.your.email()]}">Add</g:remoteLink>
为此有更好的解决方案。
在remoteLink标记中使用before属性来设置一个包含DOM内容的js变量。
例如:在js中:
var MyJSClass = {
setParams: function() {
MyJSClass.dynamicParams = {email: $("#email").val(), myOtherField: anyJSLogicHere()}
}
}
在gsp中:
<g:remoteLink action="addEmail" params="MyJSClass.dynamicParams" before="MyJSClass.setParams()">Add</g:remoteLink>
请参阅之前的代码,该代码是在请求之前执行的js函数,并设置了dynamicParams属性,该属性随后将在AJAX请求中使用。
根据爱德华的回答,我推断将执行params属性中的Javascript代码。 因此,我尝试了以下方法,并且有效:
<g:remoteLink action="addEmail" params="{email:\$('#email').val()}">Add</g:remoteLink>
如果您可以使用按钮而不是链接,那么使用g:submitToRemote变得很简单。 但是,如果必须是链接,则可以执行以下操作:
views / 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>
电子邮件控制器:
class EmailController {
def index = { }
def addEmail = {
if(params?.emailAddr) {
render "${params.emailAddr}"
}
else {
render "No Email Entered"
}
}
}
如果您对此进行自定义,则需要注意以下几点:* Ajax.Updater的第一个'resp'参数是要更新的div的ID *在Form.serialize(document.theForm)命令中,'theForm'需要与您分配表格的名称相对应。
如果您想在Jquery中使用remoteLink,这对我有用。
<g:remoteLink action="${myBean.action}" params="[myParam: myBean.param]" update="updateDiv">
My Awesome Link
</g:remoteLink>
简单而整洁。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.