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

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

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

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

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

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

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

Ответы [ 14 ]

51 голосов
/ 27 марта 2010

Store.getRange(), кажется, именно то, что вы ищете. Он вернет вам Ext.data.Record[] - массив записей. Если аргументы не переданы, возвращаются все записи.

50 голосов
/ 19 апреля 2011

Однострочный подход:

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

Не очень красиво, но довольно коротко.

9 голосов
/ 15 июля 2010
 function getJsonOfStore(store){
        var datar = new Array();
        var jsonDataEncode = "";
        var records = store.getRange();
        for (var i = 0; i < records.length; i++) {
            datar.push(records[i].data);
        }
        jsonDataEncode = Ext.util.JSON.encode(datar);

        return jsonDataEncode;
    }
4 голосов
/ 17 июня 2011

Попробуйте это:

myStore.each( function (model) {
    console.log( model.get('name') ); 
}); 
3 голосов
/ 09 апреля 2014

Вам не нужно создавать циклы и собирать / обрабатывать данные. Нужный объект json находится здесь:

var jsonData = store.proxy.reader.jsonData;
2 голосов
/ 07 ноября 2013

Вот еще один простой способ:

var jsonArr = [];
grid.getStore().each( function (model) {
    jsonArr.push(model.data);
});
2 голосов
/ 25 апреля 2012

Простой способ сделать это -

var jsonArray = store.data.items

Так что, если ваш магазин JSON

[{"text": "ABC"}, {"text": "DEF"},{"text": "GHI"},{"text": "JKL"}]

Затем вы можете восстановить "DEF" как

jsonArray[1].data.text

В следующем коде я заметил, что он преобразует каждый символ в элемент массива.

var jsonData = Ext.encode(Ext.pluck(store.data.items, 'data'));
0 голосов
/ 18 октября 2017

В моем случае я хотел javascript неровный массив, например [["row1Cell1", "row1cell2"], ["row2Cell1", "row2cell2"]] на основе содержимого хранилища сетки Ext.

javascript, как показано ниже, создаст такой массив, удалив ключ id в объекте, который мне не нужен.

var tableDataArray = [];
Ext.ComponentQuery.query('[name="table1"]')[0].store.each(function(record){
    var thisRecordArray = [];
    for (var key in record.data) {
        if (key != 'id') {
            thisRecordArray.push(record.data[key]);
        }
    }
    tableDataArray.push(thisRecordArray);
});
0 голосов
/ 18 сентября 2017

Как предложено выше, я попробовал ниже один с ошибкой.

store.proxy.reader.jsonData

Но у меня работало менее одного

store.proxy.reader.rawData
0 голосов
/ 28 сентября 2016

Если вы хотите получить данные в точности так же, как вы получаете Writer (например, игнорируя поля с persist:false config), используйте следующий код (Примечание: я проверял это в Ext 5.1)

  var arr = [];   

    this.store.each(function (record) {
        arr.push(this.store.getProxy().getWriter().getRecordData(record))
    });  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...