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

标签 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:我可以做一个特定的功能来实现它,但我认为这应该是一种简单的方法...

编辑:我已经添加了完整的数据结构,它比简单的列表要复杂一些

最佳答案

在您的 grails Controller 的操作中试试这个:

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

关于javascript - 正确地将 Groovy 列表传递给 GSP 中的 Javascript 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2063220/

相关文章:

Javascript - 为每个数组值设置间隔。设置间隔,数组,foreach

javascript - 什么是 JSON 安全对象?

grails - 从Geb测试访问Spring bean

java - Mule:防止 groovy 组件覆盖 payload

hibernate - 测试grails属性是否为惰性/未初始化?

javascript - 如果屏幕尺寸改变,如何改变圆圈的大小?

javascript - Angular : filter and bold part of the result

templates - 更好的 Grails 模板

grails - 通过继承类的字段进行GORM分离查询

groovy groupby 多个字段