如何改变ExtJS 4.2的.save() JSON输出

4

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

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

我的输出必须像这样:

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

但是我无法在编写器中创建请求和dsUsers组。我已经进行了大量测试,但实际上我不知道要改变什么才能使它正常工作。

谢谢

1个回答

1

基础的 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

我删掉了你的一点代码,现在它可以正常工作了。我不需要单个数据函数。谢谢! - Phoenix

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接