Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何更改ExtJS 4.2的.save()JSON输出_Javascript_Json_Rest_Extjs_Extjs4.2 - Fatal编程技术网

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

Javascript 如何更改ExtJS 4.2的.save()JSON输出,javascript,json,rest,extjs,extjs4.2,Javascript,Json,Rest,Extjs,Extjs4.2,使用ExtJS可更新网格将数据保存到数据库时遇到问题。 我正在使用我正在编写的RESTAPI ABL。 API正在工作,但输入JSON和输出JSON非常具体 我可以将JSON数据读入我的网格并显示它,但是当我想保存新记录时,网格会创建错误的JSON输出 我的输出必须如下所示: { "request": { "dsUsers": { "ttUsers": [{"

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

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

我的输出必须如下所示:

   {
      "request":
        {
          "dsUsers":
            {
              "ttUsers":
                [{"ID":20,"LOGIN":"test","PASS":"","ID_ADDR":0,"ID_CUST":0}]
            }
        }
    }
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;
    }    
});
但是我无法在writer中创建request和dsUsers组。 我已经测试了很多,但我真的不知道我必须改变什么才能让它工作

感谢

Base允许您仅定义根数据属性。然而,如果您需要更多像这样的自定义结构,您可以很容易地创建自己的writer

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

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

   {
      "request":
        {
          "dsUsers":
            {
              "ttUsers":
                [{"ID":20,"LOGIN":"test","PASS":"","ID_ADDR":0,"ID_CUST":0}]
            }
        }
    }
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'
    }            
});
当然,您可以通过在config中定义
“request”
“dsUsers”
属性的名称来创建更具可配置性和可重用性的自定义编写器


修改示例:

我删除了一些代码,效果很好。我不需要单一的数据功能。谢谢