【问题标题】:How do I change the .save() JSON output for ExtJS 4.2如何更改 ExtJS 4.2 的 .save() JSON 输出
【发布时间】:2014-02-22 12:23:16
【问题描述】:

我在使用 ExtJS 可更新网格将数据保存到我的数据库时遇到问题。 我正在使用我在 Progress ABL 中编写的 REST API。 API 可以正常工作,但输入 JSON 和输出 JSON 非常具体。

我可以将 JSON 数据读入我的网格并显示它,但是当我想保存新记录时,网格会创建错误的 JSON 输出。

我的输出必须是这样的:

   {
      "request":
        {
          "dsUsers":
            {
              "ttUsers":
                [{"ID":20,"LOGIN":"test","PASS":"","ID_ADDR":0,"ID_CUST":0}]
            }
        }
    }

但我无法在编写器中创建 request 和 dsUsers 组。 我已经测试了很多,但我真的不知道我必须改变什么才能让它工作。

谢谢

【问题讨论】:

    标签: javascript json rest extjs extjs4.2


    【解决方案1】:

    Base Ext.data.writer.Json 允许您仅定义根数据属性。但是,如果您需要更多像这样的自定义结构,您可以很容易地创建自己的作家。

    您的编写器应该从Ext.data.writer.Json 扩展并覆盖writeRecords 方法。此方法将记录数据添加到请求中。

    在您的情况下,自定义编写器应如下所示:

    Ext.define('myWriter', {
        extend: 'Ext.data.writer.Json',
        writeRecords: function(request, data) {
            var root = this.root;        
    
            if (this.expandData) {
                data = this.getExpandedData(data);
            }
    
            if (this.allowSingle && data.length === 1) {
                // convert to single object format
                data = data[0];
            }
    
            request.jsonData = request.jsonData || {};
            request.jsonData['request'] = {
                'dsUsers': {}
            };
    
            request.jsonData['request']['dsUsers'][root] = data;
    
            return request;
        }    
    });
    

    然后您可以在模型或存储代理中使用您的自定义编写器:

    Ext.define('User', {
        extend: 'Ext.data.Model',
        fields: ['id', 'name', 'email'],
        proxy: {
            type: 'rest',
            writer: Ext.create('myWriter', {
                root: 'ttUsers',
                mainRoot: 'dsUsers'
            }),
            url : '/users'
        }            
    });
    

    当然,您可以通过在配置中定义 "request""dsUsers" 属性的名称来创建更可配置和可重用的自定义编写器。

    举个例子:https://fiddle.sencha.com/#fiddle/33l

    【讨论】:

    • 我删除了一些代码,它工作正常。我不需要单一数据功能。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-13
    • 1970-01-01
    • 1970-01-01
    • 2012-10-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多