0

好的,我是 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,将它们连接起来,并用连接后的值替换最后一组引号。我想要发生的是为每个参数替换一组引号。

我真的不明白连接字符串的样子实际上是如何替换一个值的。

谢谢!

4

1 回答 1

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 字符串文字中的值时,您应该始终使用它,它将反斜杠转义任何需要它的东西。同样,您添加到 URL 的任何 JavaScript 字符串都需要使用 JavaScriptencodeURIComponent函数进行编码 - 例如,如果值为itemId“item one”,您需要附加item%20one到 URL。

于 2012-11-14T14:43:21.663 回答