2013-01-23 42 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