2016-05-31 62 views
0

我收到一個JSON對象從web服務誰的格式的響應是類似於: -如何解析extjs代理的響應?

 { 
     studentData:[ 
      { 
       "history":25, 
       "science":69, 
       "maths":45 
      } 
      ] 
     } 

我使用下面的下面的代碼讀取JSON: -

Ext.define('MyStore.store.dashboard.graphs.Temp', { 
extend: 'Ext.data.Store', 
proxy: { 
     type: 'ajax', 
     url: 'abc.php', 

     headers: { 
      'Content-Type': 'application/json' 
     }, 

     reader: { 
       type: 'json', 
       rootProperty: 'studentData', 

       listeners: { 

        exception: function(reader, response, error, eOpts) { 
         console.log('YT reader exception'); 
         console.log(error.message, error); 
         console.log(response); 
        } 

       } 
      } 

我可以解析JSON響應,以便以以下格式存儲它?

 { 
     studentData:[ 
      { 
       "subject":"History", 
       "marks":"25"  
      }, 
      { 
       "subject":"Maths", 
       "marks":"25" 
      } 
      ] 
     } 

我需要具有xfield作爲主體和yfield作爲標記的圖表中顯示這些值。 有沒有可以附加到代理的偵聽器,以便我可以根據我的要求修改商店結構?

+0

[收到數據後處理extjs的存儲代理數據]的可能的複製(http://stackoverflow.com/questions/14633510/process-extjs-store-proxy-data-after-data-recieved)。我認爲該主題回答了您的所有問題。 –

回答

1

根據您使用的ExtJS的版本,您可以在商店加載之前更改JSON數據。

ExtJS的4 - 您可以通過擴展Ext.data.reader.Reader 類來創建你自己的閱讀器類和重寫getResponseData(Response),並改變JSON並返回結果集。

ExtJS 5 - 您可以使用Reader類的transform特性,並可以更改響應數據對象。

Ext.create('Ext.data.Store', { 
    model: 'User', 
    proxy: { 
     type: 'ajax', 
     url : 'users.json', 
     reader: { 
      type: 'json', 
      transform: { 
       fn: function(data) { 
        // do some manipulation of the raw data object 
        return data; 
       }, 
     scope: this 
      } 
     } 
    },}); 
1

你可以在你的讀者使用transform功能:

如果轉換功能設置,它會被調用 readRecords執行之前。它傳遞了原始(反序列化)的數據對象。 transform函數返回一個數據對象,它可以是原始數據對象的修改版本 或全新的數據對象。 變換可以是實例上的函數或方法名稱,也可以是具有'fn'鍵和可選'範圍'鍵的對象。