Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将javascript变量传递到groovy块_Javascript_Grails_Groovy - Fatal编程技术网

如何将javascript变量传递到groovy块

如何将javascript变量传递到groovy块,javascript,grails,groovy,Javascript,Grails,Groovy,我需要在javascript函数中管理groovy列表对象。 我在javascript函数中加入了groovy块。 我试过这个: var obj = ${mediaObjectInstanceList as grails.converters.JSON}[index]; 这是: var obj = ${mediaObjectInstanceList.get(index)}; 但两者都错了。在第二个示例中,我将从groovy块中指定“index”int javascript变量。您不能以您定义

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

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

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

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

您不能以您定义的方式来完成这项工作

不过,实现这一目标有很多可能性

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

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

正如注射工所回答的,你不能那样做。主要原因是:

  • groovy块是在服务器端执行的:它们不知道javascript中的变量,只有浏览器知道
  • javascript在客户端执行,即浏览器不知道变量
    mediaObjectInstanceList
    (只有grails应用程序知道)
两种(主要)解决方案:

  • 当页面生成时,您不知道自己的索引(请求中没有参数)=>您必须生成整个阵列服务器端(groovy)才能在客户端(javascript)上使用

    var mediaObjectInstanceListInJS=新数组(${mediaObjectInstanceList.collect{it as JSON}.join(',')}); var someVal=mediaObjectInstanceListInJS[索引]

  • 您已经有了索引服务器端(请求中带有参数)=>您可以在groovy块中仅获取所选对象:

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


var myArray=新数组(${mediaObjectInstanceList.collect{it as JSON}.join(',')})?如果一个
obj
包含一个引号,则这可能不起作用。我的JS非常生锈,但不会
${new JSON([“q'q”,“dq”dq'])。toString()}
就足够了?为什么我需要将对象转换为JSON以再次转换为字符串?为了只浪费资源?为了对抗单引号,需要一个简单的
replaceAll()
就足够了。很遗憾,我无法解决这样的问题。我需要创建第二个对象列表,排除其中的一些对象,然后将其作为表单输入值传递。但很遗憾,groovy仅适用于字符串,无法传递对象列表。我找到了另一个解决方案,我在下面的答案中解释为注释.谢谢你的贡献!谢谢,我真的没有考虑两种不同的精化时间(groovy的服务器端和javascript的客户端)。基本上,我想创建一个对象列表来传递给控制器,只包括选中的对象。我解决了用check_uu命名复选框的问题,然后使用javascript创建一个选中ID列表,并将其添加为隐藏表单输入。因此,控制器的方法可以使用列表中的ID重新加载对象。感谢您的帮助启发我:)
var someVal = myArray[ index ];