繁体   English   中英

在Grails中使用remoteLink的动态参数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM