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>
我需要做的是显示比 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>