Javascript-форум (https://javascript.ru/forum/)
-   ExtJS (https://javascript.ru/forum/extjs/)
-   -   Ручная загрузка store (https://javascript.ru/forum/extjs/71299-ruchnaya-zagruzka-store.html)

Sogl 08.11.2017 20:11

Ручная загрузка store
 
Всем привет!

Есть у меня рабочий Fiddle с ajax прокси, который я пытаюсь переделать на memory прокси. Пока как-то не шибко получается.

Вот основной код ручной загрузки данных Ajax-запросом в store:
// app/model/Employees.js file
Ext.define('Fiddle.model.Employees', {
    extend: 'Ext.data.Model',
    entityName: 'Employees',

    fields: [
        {
            name: 'profile_pic'
        },
        {
            type: 'int',
            name: 'age'
        },
        {
            type: 'string',
            name: 'last',
            mapping: 'name.last'
        },
        {
            type: 'string',
            name: 'first',
            mapping: 'name.first'

        },
        {
            type: 'string',
            name: 'email'
        }
    ],

    proxy: {
        type: 'memory',
        reader: {
            type: 'json',
            rootProperty: 'items',
            totalProperty: 'total',
            successProperty: ''
        }
    }
});

// app/store/Employees.js file
Ext.define('Fiddle.store.Employees', {
    extend: 'Ext.data.Store',
    pageSize: 30, // items per page
    alias: 'store.employees',
    model: 'Fiddle.model.Employees',
});

//app.js fule - launch() function
var store = Ext.create('Fiddle.store.Employees');
console.log(store);


Ext.Ajax.request({
    url: 'mates.json',
    success: function(resp) {
        var result = resp.responseText;
        console.log(result);
        // store.loadRawData(result);
        store.loadData(result);
        console.log(store);
        console.log(store.getAt(0));
    },
});


В итоге я получаю в своем store 3386 записей (посимвольно с json-файла) и вот так выглядит первая запись, которую вывожу в консоль:



Что я делаю не так? :)
И куда правильнее прописывать proxy — в store или в model? В некоторых примерах и в моем рабочем проекте в model, но в большинстве кода встречаемого мной прописывают в store.

Sogl 09.11.2017 02:43

В общем, проблема была в том, что нужно было предварительно декодировать JSON из строки в объект.

В итоге сделал так:
//in Grid panel js file
listeners: {
    afterrender: function(grid, evt) {

        var myStore = grid.getStore();

        Ext.Ajax.request({
            url: 'mates.json',
            success: function(resp) {
                var result = Ext.decode(resp.responseText);
                myStore.getProxy().data = result;
                myStore.load();
            },
        });

    }
}


В таком варианте даже paddingtoolbar нормально отображает количество записей.


Часовой пояс GMT +3, время: 04:55.