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

Posted

技术标签:

【中文标题】正确地将 Groovy 列表传递给 GSP 中的 Javascript 代码【英文标题】:Correctly pass a Groovy list to Javascript code in GSP 【发布时间】:2011-01-05 00:20:30 【问题描述】:

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

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

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】:

在你的 grails 控制器的操作中试试这个:

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

【讨论】:

【参考方案2】:

在你的 grails 控制器的操作中试试这个:

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

如果有人有对象,这将在您的 gsp 中起作用:

<g:javascript>
    var types = JSON.parse('$typeList');
    alert("Type id:" + types[1].id);
</g:javascript>

【讨论】:

以上是关于正确地将 Groovy 列表传递给 GSP 中的 Javascript 代码的主要内容,如果未能解决你的问题,请参考以下文章

干净地将参数列表传递给 ProcessStartInfo

如何正确地将字符串 id 传递给 Xamarin.Forms 中的 API 控制器

如何正确地将 C 数组传递给 C#?

React Native:如何正确地将 renderItem 项传递给 FlatList,以便它们可以在另一个组件中呈现?

如何正确地将指针传递给第 3 方代码的成员函数? [复制]

Python 和 ctypes:如何正确地将“指针对指针”传递给 DLL?