我需要做的是显示比允许我显示的表格大小更多的信息。 为此,当用户将鼠标悬停在他需要查看的行上时,我将打开一个包含完整信息的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}")'
但这不是理念,对吧?此外,还有很多参数。
任何想法都会有所帮助。 感谢。
答案 0 :(得分:0)
您可以在控制器中将数据编码为JSON
,如下所示:
render (model:[detailList:detailList as JSON], view:'show')
在视图中,您可以将JSON
分配给任何JavaScript变量:
<script>
var myJsDetailList = ${raw(detailList)};
</script>
如果您不想将JSON
从控制器传递到视图,则可以使用GSP
对encodeAsJSON()
中的数据进行编码:
<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>