2016-05-31 48 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'键和可选'范围'键的对象。