正确地将Groovy列表传递给GSP中的Javascript代码

时间:2010-01-14 09:33:38

标签: javascript grails groovy gsp

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

JavaScript函数的gsp页面上的(简化)代码如下

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

问题在于,如果将typeList定义为(在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 )

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

有没有办法强制Groovy使用引号或任何其他简单的方法来打印数组列表?

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

编辑:我添加了完整的数据结构,比简单列表更复杂

1 个答案:

答案 0 :(得分:9)

在grails控制器的操作中尝试此操作:

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