Grails发送参数从g:each到javascript

时间:2015-01-27 20:28:49

标签: javascript json grails each gsp

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

我遇到的问题是当我将参数从行传递给javascript函数时。 我不能像JSON对象那样使用它

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

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

在视图中,我调用javascript函数打开对话框,然后我发送“循环”对象“$ {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}")'

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

任何想法都会有所帮助。 感谢。

1 个答案:

答案 0 :(得分:0)

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

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

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

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

如果您不想将JSON从控制器传递到视图,则可以使用GSPencodeAsJSON()中的数据进行编码:

<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>