繁体   English   中英

Grails RemoteFunction params语法

[英]Grails RemoteFunction params syntax

我试图将一些参数传递给grails中的remoteFunction,但我正在努力将其正确格式化

我想传递页面上一段数据的值加上我刚刚选中的文本框的值,所以在我的onblur中我有一些类似的东西:

onblur=${remoteFunction(action:'dave',  update:'pack'+it.id,
         params:[denom:document.getElementById(denomValue+${it.id}).value ,
         amount:this.value ])}

这不会编译 - 我不能用不同数量的单引号和转义符来提出任何排列。

我觉得真正让我感到困惑的是,我真的不明白我想在这里创造什么。 是否就像使用JSP代码创建JavaScript,我将在以后执行? 什么时候对这个表达式进行评估 - 它是在编译页面的时候 - 或者在调用oblur的时候是a =它?

任何帮助非常感谢。

看起来你已经将服务器端代码与客户端代码混淆了。

当页面被“构建”以发送到客户端浏览器时,将评估Grails代码。

一旦页面传送到浏览器,将评估Javascript代码。

考虑到这一点,让我们来看看你的onblur任务:

onblur=${remoteFunction(
         action:'dave', 
         update:'pack'+it.id, 
         params: [denom: document.getElementById(denomValue+${it.id}).value, 
                  amount: this.value ])}

鉴于$ {remoteFunction ...}调用是Grails标记,它将在服务器上进行评估,生成固定字符串,然后发送到客户端。 调用内的所有内容都必须是有效的Groovy代码。

查看params地图,你在Groovy代码里面的denom值中添加了一些Javascript:

document.getElementById(denomValue

然后你尝试从Groovy添加一个值

+${it.id}

然后再一些Javascript

).value

Groovy编译器将尝试将Javascript评估为Groovy代码并失败。

如果您需要在Javascript中访问客户端参数,您需要自己处理Javascript(而不是使用remoteFunction标记),例如处理远程调用:

var path=${createLink(action:'dave',
                      params: [amount:this.value])} 
           + "&denom=" 
           + document.getElementById(denomValue+${it.id}).value

您还需要使用Javascript自行处理远程响应以更新“pack”元素。 您可以随时查看remoteFunction调用生成的内容,将其复制到页面中并对其进行编辑以执行您想要的操作。

HTH

或者您可以传递由'&'分隔的参数

params:'\\'param1=\\'+this.value+\\'&booleanParam2=true\\''

你实际上仍然可以使用远程函数标记,你只需要在javascript对象字符串中编写参数,所以这实际上在我使用的东西中工作得很好。

var denomValue = document.getElementById(denomValue+${it.id}).value;
onblur=${remoteFunction(
     action:'dave', 
     update:'pack'+it.id, 
     params: '{denom: denomValue, amount: this.value}'
     )}
<button type="button" class="btn btn-success" id="value-pie" onClick="ajaxFunction(this.value)">Confirmar</button>

<script>
function ajaxFunction(id){
     var obs = $("#observacion").val()
     var parameters = { "serieId":id,
                        "observacion":obs
                      }
     <g:remoteFunction controller="control"
                  action="ajax"
                  method="GET"
                  onSuccess="updateModal(data)"
                  params="parameters"/>
}
</script>

我有同样的问题,但上面的所有答案都没有帮助,因为我想要得到的值是选择下拉列表中的选定值以及正在迭代的表中的obj实例。 以下是解决方案。

<g:select
                                             from="${list}" 
                                      optionKey="value"
                                      optionValue="key"

                                      onchange="getValue(this.value, ${instance.id})"/>

    <script type="text/javascript">     
              function getValue(Id1, Id2)
              {

                  $.ajax({
                      type: 'POST',
                      url: '/app/controller/functionToCall',
                      data: { someId: Id1, otherId:Id2},

                  });

              }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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