Как настроить хранилище для чтения необработанного массива чисел из вызова ajax/rest?

Я пытаюсь понять, как настроить Store для чтения необработанного массива чисел JSON из запроса GET через AjaxProxy.

Требуется Please associate a Model with the store, or add one or more Fields to the store. У меня нет модели и нет полей, это просто необработанный массив JSON. ArrayStore тоже не кажется правильным, так как он ищет массив массивов из того, что говорится в документации.

Вот пример JSON, который возвращает запрос GET:

[1,2,3,4,5,6,7,8,9,10]

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

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

Вот как далеко я продвинулся:

Ext.define('fivestar.store.NumberStore', {
    extend: 'Ext.data.Store',

    requires: [
        'Ext.data.proxy.Ajax',
        'Ext.data.reader.Json'
    ],

    constructor: function(cfg) {
        var me = this;
        cfg = cfg || {};
        me.callParent([Ext.apply({
            storeId: 'NumberStore',
            proxy: {
                type: 'ajax',
                reader: {
                    type: 'json'
                }
            }
        }, cfg)]);
    }
});

Я прочитал документацию, искал повсюду и нашел только один ответ, в котором говорится о transform данных и добавлении field. Я также нашел это, но это не имеет достаточно кода, чтобы объяснить, как использовать ответ. Есть ли другой способ, который не такой тяжелый?

Что мне не хватает?


person Community    schedule 22.08.2017    source источник
comment
Чтобы уточнить, что вы ожидаете в конечном итоге в магазине? 10 записей с идентификатором от 1 до 10?   -  person Evan Trimboli    schedule 23.08.2017


Ответы (1)


Вы можете использовать метод преобразования для преобразования необработанных данных в объекты:

Ext.define('MyStore', {
    extend: 'Ext.data.Store',

    proxy: {
        type: 'ajax',
        url: 'data1.json',
        reader: {
            type: 'json',
            transform: raw => raw.map(v => ({ id: v }))
        }
    }
});

var s = new MyStore();
s.load(() => {
    console.log(s.getRange().map(r => r.id));
});

Поиграйте здесь.

person Evan Trimboli    schedule 22.08.2017