g:带有Javascript / jQuery内部参数的消息无法按预期工作

时间:2016-02-12 23:57:08

标签: javascript jquery grails

我遇到了一个问题,即String参数被截断为g:message标记中的第一个字符(longs / integers似乎很好)。

最终,我发现我们没有在Javascript中调用g:message语法正确,所以一些小调整修复了这个问题。问题是 - 我不明白为什么前者不起作用。

有人能描述这里发生了什么吗?

jQuery("#myId").html("<g:message code='domain.message.path' args="${command?.foo?.name}"/>"); //incorrect, only displays first character of message

jQuery("#myId").html("${g.message(code: 'domain.message.path', args: [command?.foo?.name])}"); //correct, displays full string

1 个答案:

答案 0 :(得分:3)

我假设您将此作为.gsp页面的一部分进行渲染?这就是事情。在第一个中,您可以嵌套引号,基本上将$ {}部分留在字符串之外。甚至Stackoverflow都可以告诉;请注意该部分是如何不同的颜色:

jQuery("#myId").html("<g:message code='domain.message.path' args="${command?.foo?.name}"/>"); 

查看html末尾的引用(由$ {之前的引号结束,将$ {command?.foo?.name}块保留在字符串之外?如果command.foo.name是字符串&# 34; bob&#34;,然后在渲染时,你得到:

jQuery("#myId").html("<g:message code='domain.message.path' args="bob"/>");

你可能认为这看起来是正确的,但是javascript会很难处理这个问题。

如果您使用单引号作为内部字符串,就像使用&#39; domain.message.path&#39;一样,它应该可以正常工作:

jQuery("#myId").html("<g:message code='domain.message.path' args='${command?.foo?.name}'/>");