2010-01-14 61 views
5

我正在用Grails制作Web应用程序。我有一个列表,其中包含必须包含在JavaScript中的数据以执行<select>下拉列表中的一些动态加载。基本上,我从服务器获取两级列表,然后第一级显示在下拉框中。当用户选择一个选项时,与该选项关联的列表将出现在另一个下拉框中。正确地将Groovy列表传递给GSP中的Javascript代码

为JavaScript函数的GSP页面上的(简化的)码下面

function selecTipe() { 
     var types = ${typeList} 
     alert('List of types ' + types) 

的问题是,如果类型串被定义(在Groovy)作为

typeList = [['TYPE1', ['VAR1','VAR2','VAR3']], 
      ['TYPE2', ['VAR1','VAR2','VAR3']] 
      ['TYPE3', ['VAR1','VAR2','VAR3']] ] 

当页面被渲染,JavaScript代码看起来像

function selecTipe() { 
     var types = [[ TYPE1, [ VAR1, VAR2, VAR3 ]], 
        [ TYPE2, [ VAR1, VAR2, VAR3 ]] 
        [ TYPE3, [ VAR1, VAR2, VAR3 ]] ] 
     alert('List of types ' + types) 

这是错误的,因为Java脚本不作为字符串处理,而是作为缺少引号的引用。

有什么办法可以强制Groovy使用引号或任何其他简单的方法来打印数组列表来实现这个目标吗?

PD:我可以做一个特定的功能来实现它,但我认为它应该是一个简单的方法来做到这一点...

编辑:我已经添加了完整的数据结构,是在你的Grails控制器的动作有点不是一个简单的列表更复杂

回答

8

试试这个:

def types = ['TYPE1', 'TYPE2', 'TYPE3'] as grails.converters.JSON 
[typeList : types] 
+1

它完美!即使是更复杂的阵列。 – Khelben 2010-01-14 14:23:00

相关问题