Как получить массив данных JSON из магазина ExtJS - PullRequest
38 голосов
/ 27 марта 2010

Есть ли способ, позволяющий мне возвращать мои сохраненные данные в Grid Panel ExtJS точно так, как я их загружал, используя:

var data = ["value1", "value2"]
Store.loadData(data);

Я бы хотел, чтобы у пользователя была возможность перезагрузить Грид, но изменения в хранилище должны быть приняты во внимание. Пользователь может вносить изменения, и сетка динамически обновляется, но если я перезагружаю сетку, отображаются данные, которые были первоначально загружены, даже если база данных была обновлена ​​с новыми изменениями. Я бы предпочел не перезагружать страницу и просто позволить им перезагружать сами данные сетки в только что измененном хранилище.

Наверное, я ищу что-то вроде этого:

var data = Store.getData();
//data = ["value1", "value2"]

после того, как все сказано и сделано. Или есть другой способ обновить сетку новыми данными, о которых я не знаю. Даже при использовании прокси все равно используются «оригинальные» данные, а не новое хранилище.

Ответы [ 14 ]

0 голосов
/ 16 июня 2016
proxy: {
        type: 'ajax',
        actionMethods: {
            read: 'POST',
            update: 'POST'
        },
        api: {
            read: '/bcm/rest/gcl/fetch',
            update: '/bcm/rest/gcl/save'
        },
        paramsAsJson: true,
        reader: {
            rootProperty: 'data',
            type: 'json'
        },
        writer: {
            allowSingle: false,
            writeAllFields: true,
            type: 'json'
        }
    }

Используйте allowSingle, он преобразуется в массив

0 голосов
/ 25 мая 2013

Я всегда использую store.proxy.reader.jsonData или store.proxy.reader.rawData

Например - это возвращает элементы, вложенные в корневой узел с именем 'data':

var some_store = Ext.data.StoreManager.lookup('some_store_id');
Ext.each(some_store.proxy.reader.rawData.data, function(obj, i){
   console.info(obj);
});

Это работает только сразу после операции чтения из хранилища (пока еще не было изменено).

0 голосов
/ 03 апреля 2012

Я столкнулся со своей проблемой, пытаясь получить доступ к данным из хранилища, не привязывая их к компоненту, и большинство из них было связано с тем, что хранилище было загружено через ajax, поэтому потребовалось использовать событие load для чтения данных. Это сработало:

store.load();
store.on('load', function(store, records) {
    for (var i = 0; i < records.length; i++) {
    console.log(records[i].get('name'));
    };
});
0 голосов
/ 02 сентября 2011

Лучший (IMO) однострочный подход, работает на ExtJS 4, не уверен насчет 3:

store.proxy.reader.jsonData
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...