Подтвердить что ты не робот

ExtJS: Как получить необработанные данные JSON из Ext.data.Store?

Из типичного магазина, подобного этому

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

Возможно ли получить сырой Json из myStore?

4b9b3361

Ответ 1

Как насчет:

myStore.proxy.reader.rawData

Ответ 2

Принятое решение не работало в моей конфигурации: ExtJs 4.1 и сетка с прокси-сервером памяти - он возвращался пустым после того, как я добавил элементы в gird (и объект хранилища отразил это). Следующий код работал для содержимого содержимого кодировки в строке JSON:

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

Ура!

Ответ 3

Мне потребовалось время, чтобы найти решение этого, но вот одно решение, которое будет работать.

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

Ответ 4

Чтение прокси-сервера rawData/jsonData станет доступным после создания хранилища. Чтобы получить доступ к нему, попробуйте следующее:

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

Ответ 5

возможно, вы можете попробовать:

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

суа!

Ответ 6

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

Ответ 7

Похоже, я нашел решение, подключив прослушиватели событий к хранилищу данных:

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