Grails 将参数从 g:each 发送到 javascript

Grails Sending parameter from g:each to javascript

我需要做的是显示比 table 尺寸允许显示的更多信息。 为此,当用户将鼠标悬停在他需要查看的行上时,我将打开一个包含全部信息的 jQuery 对话框。

我遇到的问题是当我将行中的参数传递给 javascript 函数时。 我无法将其用作 JSON 对象

我从控制器向视图 (gsp) 发送一个 ArrayList g:each。

def detailList = [[key11:val11, key12,val12],[key21:val21, key22:val22]] //...etc
render (model:[detailList:detailList], view:'show')

在视图中,我调用 javascript 函数来打开对话框,然后我发送 "looping" 对象“${detail}”

<g:each in="${detailList}" status="i" var="detail">
    <tr class="${(i % 2) == 0 ? 'even' : 'odd'}" onmouseover='openDialog("${detail}")' onmouseout='closeDialog()' >
        <td>${detail.code}</td>                     
        <td>${detail.name}</td>
    </tr>
</g:each>

但是我在 javascript 函数中收到的是这样的:

{key11=val11, key12=val12}

而 javascript 需要成功 JSON.parse() 的是:

{"key11"="val11", "key12"="val12"}

我无法使用正则表达式或 splits() 或任何其他方法修复此 "JSON",因为其中一个参数是一个描述,我可以在其中接收任何类型的字符。

是否有任何其他方法来接收 javascript 中的对象并像这样使用它: 警报(detail.code)?

我知道我可以像这样一个一个地发送参数:

onmouseover='openDialog("${detail.code}", "${detail.name}")'

但这不是 Idea,对吧?此外,还有很多参数。

任何想法都会很有帮助。 谢谢。

您可以在控制器中将数据编码为 JSON,如下所示:

render (model:[detailList:detailList as JSON], view:'show')

在视图中,您可以将 JSON 分配给任何 JavaScript 变量:

<script>
    var myJsDetailList = ${raw(detailList)};
</script>

如果您不想将 JSON 从控制器传递给视图,您可以使用 encodeAsJSON():

GSP 中的数据进行编码
<g:each in="${detailList}" status="i" var="detail">
   <tr class="${(i % 2) == 0 ? 'even' : 'odd'}" onmouseover='openDialog("${detail.encodeAsJSON()}")' onmouseout='closeDialog()' >
      <td>${detail.code}</td>                     
      <td>${detail.name}</td>
   </tr>
</g:each>