如何以extjs Json Store的格式将json数据发送到服务器

时间:2013-01-23 07:08:05

标签: extjs extjs4.1 jsonstore

我有一个应用程序,当页面加载时会得到如下所示的json响应。

{
{"level2List":[{id:'id1', name:'sample'},....]},
{"level3List":[{id:'id1', name:'sample'},....]},
{"level4List":[{id:'id1', name:'sample'},....]}}

所以我将所有记录都放在根元素中,如“level2List”,“level3List”,level4List等。通过使用这些记录,我创建了一个可编辑的网格。当用户编辑我正在调用store.sync方法的任何记录时。然后它只将编辑后的记录的json发送到后端服务器。喜欢

[{id:'id1', name:'sample'},....]

但是我需要以与页面加载相同的格式发送json数据。我的意思是我需要使用它们所属的根元素发送已编辑的记录。

非常感谢任何帮助。提前谢谢..

1 个答案:

答案 0 :(得分:2)

假设您的模型实例知道它们属于哪个“根元素”,您可以通过创建自定义编写器来实现此目的。例如,如果扩展Ext.data.writer.Json,并在其中创建自己的writeRecords()方法,则可以动态定义要发送的根。

writeRecords: function(request, data) {
    var root = this.root; // HERE IS WHERE YOU COULD DEFINE YOUR ROOT
    if (this.allowSingle && data.length == 1) {
        // convert to single object format
        data = data[0];
    }
    if (this.encode) {
        if (root) {
        // sending as a param, need to encode
            request.params[root] = Ext.encode(data);
        } else {
            //<debug>
            Ext.Error.raise('Must specify a root when using encode');
            //</debug>
        }
    } else {
        // send as jsonData
        request.jsonData = request.jsonData || {};
        if (root) {
            request.jsonData[root] = data;
        } else {
            request.jsonData = data;
        }
    }
    return request;
}

您只需在代理上使用自定义编写器。