2013-01-23 45 views
2

我有一个应用程序,它会在页面加载时得到如下所示的json响应。如何从extjs格式发送json数据到服务器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数据,我在页面加载。我的意思是我需要用它们所属的根元素发送编辑过的记录。

任何帮助将不胜感激。在此先感谢..

回答

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; 
} 

你只需要在你的代理上使用自定义编写器。

+0

感谢您的帮助! – Sanjeeva

+0

当然。如果这给了您正确的答案,请将其标记为已接受。谢谢! – existdissolve