如何从extjs json存储区以一种格式将json数据发送到服务器

如何从extjs json存储区以一种格式将json数据发送到服务器,extjs,extjs4.1,jsonstore,Extjs,Extjs4.1,Jsonstore,我有一个应用程序,当页面加载时,它将得到如下所示的json响应 { {"level2List":[{id:'id1', name:'sample'},....]}, {"level3List":[{id:'id1', name:'sample'},....]}, {"level4List":[{id:'id1', name:'sample'},....]}} 因此,我将获取根元素中的所有记录,如“level2List”、“level3List”、“level4List”等。。通过使用这些记录,

我有一个应用程序,当页面加载时,它将得到如下所示的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数据。我的意思是我需要发送编辑过的记录以及它们所属的根元素


任何帮助都将不胜感激。提前感谢..

假设您的模型实例知道它们属于哪个“根元素”,您可以通过创建自定义编写器来实现这一点。例如,如果扩展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;
}
writeRecords:功能(请求、数据){
var root=this.root;//在这里可以定义根
if(this.allowSingle&&data.length==1){
//转换为单对象格式
数据=数据[0];
}
if(this.encode){
如果(根){
//作为参数发送,需要编码
request.params[root]=Ext.encode(数据);
}否则{
//
Ext.Error.raise('使用encode时必须指定根');
//
}
}否则{
//作为jsonData发送
request.jsonData=request.jsonData | |{};
如果(根){
request.jsonData[root]=数据;
}否则{
request.jsonData=数据;
}
}
返回请求;
}
首先,您只需要在代理上使用自定义编写器