ExtJS:如何从Ext.data.Store获取原始JSON数据?

时间:2012-02-05 17:37:48

标签: extjs4

来自这样的典型商店

Ext.define('User', {
    extend: 'Ext.data.Model',
    fields: [
        {name: 'firstName', type: 'string'},
        {name: 'lastName',  type: 'string'},
        {name: 'age',       type: 'int'},
        {name: 'eyeColor',  type: 'string'}
    ]
});

var myStore = Ext.create('Ext.data.Store', {
    model: 'User',
    proxy: {
        type: 'ajax',
        url : '/users.json',
        reader: {
            type: 'json',
            root: 'users'
        }
    },
    autoLoad: true
});

是否可以从myStore获取原始Json?

7 个答案:

答案 0 :(得分:17)

怎么样:

myStore.proxy.reader.rawData

答案 1 :(得分:11)

接受的解决方案在我的配置中不起作用:ExtJs 4.1和带有内存代理的网格 - 在我将项添加到gird(并且商店对象反映出来)之后它返回空。以下代码用于将存储内容编码为JSON字符串:

var json = Ext.encode(Ext.pluck(store.data.items, 'data'));

干杯!

答案 2 :(得分:4)

花了我很多年才找到解决方案,但这里有一个可行的解决方案。

    myStore .on({ 'load': function (store, records, successful)
    {
        console.log(store.getProxy().getReader().rawData);
    } 
    });

答案 3 :(得分:1)

创建商店后,代理阅读器rawData / jsonData将可访问。要访问它,请尝试以下操作:

store.on('load', function() {
  console.log('store.proxy.reader.jsonData');
  console.log(store.proxy.reader.jsonData);
}, this, { single: true });

答案 4 :(得分:0)

也许,你可以试试这个:

var json = Ext.JSON.encode(myStore.getRange());

CYA!

答案 5 :(得分:0)

Ext.data.Store({....
            proxy: {
                       ...
                       reader: {
                       **keepRawData: true,**
                       type: 'json',
                       rootProperty: 'root',
                       successProperty: 'success'
                       }
                    }
                }); 

答案 6 :(得分:-1)

看起来我通过将事件侦听器挂钩到数据存储来找到解决方案:

var myStore = Ext.create('Ext.data.Store', {
  ...
  listeners: {
    'load': {
      fn: function(store, records, success, operations) {
        Ext.each(records, function(rec) {
          console.log(Ext.encode(rec.raw));
        });
      }
    }
  }
  ...
});