我试图将一些参数传递给grails中的remoteFunction,但我正在努力将其正确格式化
我想传递页面上一段数据的值加上我刚刚选中的文本框的值,所以在我的onblur中我有一些类似的东西:
onblur=${remoteFunction(action:'dave', update:'pack'+it.id,
params:[denom:document.getElementById(denomValue+${it.id}).value ,
amount:this.value ])}
Run Code Online (Sandbox Code Playgroud)
这不会编译 - 我不能用不同数量的单引号和转义符来提出任何排列.
我觉得真正让我感到困惑的是,我真的不明白我想在这里创造什么.是否就像使用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 ])}
Run Code Online (Sandbox Code Playgroud)
鉴于$ {remoteFunction ...}调用是Grails标记,它将在服务器上进行评估,生成固定字符串,然后发送到客户端.调用内的所有内容都必须是有效的Groovy代码.
查看params地图,你在Groovy代码里面的denom值中添加了一些Javascript :
document.getElementById(denomValue
Run Code Online (Sandbox Code Playgroud)
然后你尝试从Groovy添加一个值
+${it.id}
Run Code Online (Sandbox Code Playgroud)
然后再一些Javascript
).value
Run Code Online (Sandbox Code Playgroud)
Groovy编译器将尝试将Javascript评估为Groovy代码并失败.
如果您需要在Javascript中访问客户端参数,您需要自己处理Javascript(而不是使用remoteFunction标记),例如处理远程调用:
var path=${createLink(action:'dave',
params: [amount:this.value])}
+ "&denom="
+ document.getElementById(denomValue+${it.id}).value
Run Code Online (Sandbox Code Playgroud)
您还需要使用Javascript自行处理远程响应以更新"pack"元素.您可以随时查看remoteFunction调用生成的内容,将其复制到页面中并对其进行编辑以执行您想要的操作.
HTH
小智 5
你实际上仍然可以使用远程函数标记,你只需要在javascript对象字符串中编写参数,所以这实际上在我使用的东西中工作得很好.
var denomValue = document.getElementById(denomValue+${it.id}).value;
onblur=${remoteFunction(
action:'dave',
update:'pack'+it.id,
params: '{denom: denomValue, amount: this.value}'
)}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17063 次 |
| 最近记录: |