如何将javascript变量传递给groovy块

时间:2014-02-26 14:50:47

标签: javascript grails groovy

我需要在javascript函数中管理一个groovy列表对象。 我有一个groovy块进入javascript函数。 我试过这个:

var obj = ${mediaObjectInstanceList as grails.converters.JSON}[index];

和此:

var obj = ${mediaObjectInstanceList.get(index)};

但两者都错了。在第二个中,我将在groovy块中指定“index”int javascript变量。

2 个答案:

答案 0 :(得分:1)

你不能以你定义它的方式做到这一点。

尽管如此,有很多可能实现这一目标。

其中一个是定义一个JS变量并用groovy模型值填充它:

var myArray = new Array( 
<g:each in="${mediaObjectInstanceList}" var="obj" status="ix">
  ${status ? ',' : ''} '${obj}'
</g:each>
);

然后你可以使用普通的下标表示法在JS中遍历这个数组:

var someVal = myArray[ index ];

答案 1 :(得分:0)

正如injecteer所说,你做不到。主要是因为:

  • groovy块在服务器端执行:他们无法知道浏览器只知道javascript中的变量。
  • javascript是客户端执行的,即。浏览器不知道变量mediaObjectInstanceList(仅由您的grails应用程序知道)。

两个(主要)解决方案:

  • 生成页面时您不知道索引(请求中没有参数)=&gt;您必须生成整个阵列服务器端(groovy)以在客户端(javascript)可用。

    var mediaObjectInstanceListInJS = new Array($ {mediaObjectInstanceList.collect {it as JSON} .join(',')}); var someVal = mediaObjectInstanceListInJS [index];

  • 您已经拥有索引服务器端(请求中包含params)=&gt;你只能在groovy中阻止你选择的对象:

    var someVal = $ {mediaObjectInstanceListInJS [params.index] as JSON};