grails - 我可以使用grails通过匿名javascript函数以某种方式发出数据

标签 grails extjs

我想让 Controller 发出类似以下内容的JSON响应:

{
    sidebar: {
        xtype: "container",
        flex: 1,
        bodyCls: "my-sidebar",
        itemId: "my-sidebar-container",
        items: [
        {
            xtype: "panel",
            animCollapse: false,
            collapseFirst: false,
            collapsed: false,
            collapsible: true,
            flex: 1,
            bodyCls: "my-sidebar-message-section",
            itemId: "my-sidebar-message-section-container",
            html: "<h1>Messages (2)</h1><p>Bank will be closed on September 4th, 2013 for Labor Day</p><p>Lorem ipsum dolor sit amet, <a href="http://google.com">consectetur</a> adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>",
            listeners: {
                 boxready: function(p) {
                      alert('Hi');
                 }
            }
        }
        ]
    }
}

在我的Grails Controller 中,我这样定义它:
package com.fourgablesguy.myapp

import grails.converters.JSON

class SidebarController {

def generateSideBar() {
    def sidebarItems = [
            [
                xtype: 'panel',
                animCollapse: false,
                collapseFirst: false,
                collapsed: false,
                collapsible: true,
                flex: 1,
                bodyCls: 'my-sidebar-message-section',
                itemId: 'my-sidebar-message-section-container',
                html: messageSectionHtml,
                listeners: [
                    boxready: "function(p) { alert('Hi');}"
                ]
            ]
        ]
    [
     xtype: 'container',
     flex: 1,
     bodyCls: 'my-sidebar',
     itemId: 'my-sidebar-container',
     items: sidebarItems
    ]
}

但是grails.converters.JSON将我的function()定义转换为字符串,因此 Controller 操作发出的实际JSON具有function()的字符串:
{
    sidebar: {
        xtype: "container",
        flex: 1,
        bodyCls: "my-sidebar",
        itemId: "my-sidebar-container",
        items: [
        {
            xtype: "panel",
            animCollapse: false,
            collapseFirst: false,
            collapsed: false,
            collapsible: true,
            flex: 1,
            bodyCls: "my-sidebar-message-section",
            itemId: "my-sidebar-message-section-container",
            html: "<h1>Messages (2)</h1><p>Bank will be closed on September 4th, 2013 for Labor Day</p><p>Lorem ipsum dolor sit amet, <a href="http://google.com">consectetur</a> adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>",
            listeners: {
                 boxready: "function(p) {alert('Hi');}"
                 }
            }
        }
        ]
    }
}

具体问题是此行:
boxready:“function(p){alert('Hi');}”
我想知道一种替代上述方法的方法:
boxready:function(p){alert('Hi');}

这不是我要尝试以JSON返回的“对象数据”,我可以理解这是不可能的。

最佳答案

如果仔细看看json.org,您会发现JSON是一种数据交换格式,并且JSON中允许的类型不包括Function或函数声明。如果有function,那就不再是JSON了,那就是javascript。您永远不会有一个允许在其中传递函数的JSON转换器(如果您不这样做的话)

如果要将函数传递给 Controller ​​,为什么不传递要调用的函数的名称和参数,这将在单独的javascript文件中定义。

关于grails - 我可以使用grails通过匿名javascript函数以某种方式发出数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14225793/

相关文章:

javascript - ExtJS 6.2 无法将插件添加到内部网格 - TypeError : view is undefined

extjs - sencha 建筑师生产版本 : Uncaught TypeError: c is not a constructor

extjs - 通用应用程序 : only build classic toolkit

grails - 为引导数据创建自定义迁移脚本并在 Grails 中执行一些与 SQL 相关的操作

grails - Groovy httpbuilder发布列表参数

hibernate - grails 不使用缓存

grails - 为什么在插件的配置中未定义Config.groovy变量?

xml - 使用Grails REST插件获取XML

extjs - 如何格式化 ExtJs 图表轴?

Extjs 树面板 : how to drop a node on leaf nodes