从javascript函数更新groovy字符串中的多个参数

时间:2012-11-14 13:12:53

标签: javascript grails groovy

好的,我是javascript / grails新手,我不知道该怎么做。

基本上我有一个用多个参数调用的javascript函数,我想将它们替换为grails可解析字符串。

我有一些grails下拉,调用javascript函数链接到另一个页面,其中包含多个需要传递的参数(项目编号和数量)。

这是选择:

<g:select optionKey="key" optionValue="value" value="${item.getQty()}" name="qty" from="[1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9]"
onchange="goToPage('qty${item.id}',this.value)"></g:select>

javascript函数:

<script type="text/javascript">
function goToPage(itemId, val){
window.location.href="${createLink(controller:'GOrder' ,action:'updateShoppingCart' params:[item: "", qty: ""])}" + itemId + val;
}

因此,它接受itemId和val,将它们连接起来并用该连接值替换最后一组引号。我想要发生的是每个参数替换其中一组引号。

我真的不明白连接字符串的方式实际上是如何替换值。

谢谢!

1 个答案:

答案 0 :(得分:1)

你的服务器和客户端在这里混淆了。在

${createLink(controller:'GOrder' ,action:'updateShoppingCart' params:[item: "", qty: ""])}
在将GSP呈现为HTML时,Grails会在服务器端对

进行评估,因此您在JavaScript中最终会得到的结果如下所示

function goToPage(itemId, val){
  window.location.href="/myapp/GOrder/updateShoppingCart?item=&amp;qty=" + itemId + val;
}

您可能想要的只是在Grails端生成问号以后的基本URL,然后在JavaScript中在客户端添加查询参数

function goToPage(itemId, val){
  window.location.href=
     "${createLink(controller:'GOrder', action:'updateShoppingCart'
         ).encodeAsJavaScript()}?item=" + encodeURIComponent(itemId)
    + "&amp;qty=" + encodeURIComponent(val);
}

请注意我添加encodeAsJavaScript()的方式 - 在生成要包含在JavaScript字符串文字中的值时,应始终使用此方法,它将反斜杠 - 转义需要它的任何内容。同样,您添加到网址的任何JavaScript字符串都需要使用JavaScript encodeURIComponent函数进行编码 - 例如,如果itemId的值为“第一项”,则需要附加{{1到URL。