Javascript-форум (https://javascript.ru/forum/)
-   ExtJS (https://javascript.ru/forum/extjs/)
-   -   опять pagingmemory (https://javascript.ru/forum/extjs/33991-opyat-pagingmemory.html)

XAPuTOH 17.12.2012 09:43

опять pagingmemory
 
Всем привет.

Вопрос от новичка.

var myData = [
        ['0','3m Co',71.72,'9/1 12:00am'],
        ['1','Alcoa Inc',29.01,'9/1 12:00am'],
        ['2','Altria Group Inc',83.81,'9/1 12:00am'],
        ['3','American Express Company',52.55,'9/1 12:00am'],
        ['4','American International Group, Inc.',64.13,'9/1 12:00am'],
        ['5','AT&T Inc.',31.61,'9/1 12:00am'],
        ['6','Boeing Co.',75.43,'9/1 12:00am'],
        ['7','Caterpillar Inc.',67.27,'9/1 12:00am'],
        ['8','Citigroup, Inc.',49.37,'9/1 12:00am']
    ];
	
    Ext.define('log', {
        extend: 'Ext.data.Model',
        idProperty: 'id',
        fields: [
            {name:'id', type:'int'},
            {name:'datevalue', type:'date', dateFormat:'d.m.Y H:i:s'},
            {name:'obj_name', type:'string'},
            {name:'log_name', type:'string'},
        ]
	})

	var store = Ext.create('Ext.data.Store', {
		model: 'log',
        storeId:'ws_r_store_1_id',
		pageSize: 3,
		proxy: {
			type: 'pagingmemory',
			data: myData,
			reader: {
				type: 'array'
			}
		}
	})

потом идет грид в котором есть pagingtoolbar
и
store.load();


все отлично работает.

Дальше я коментирую сторчки:
//data: myData
....
и  
     //store.load();


и в пхп сперва загружаю этот скрипт а потом подгружаю данные в store
Ext.data.StoreManager.lookup('ws_r_store_1_id').loadData(" . json_encode($table_mm) . ",false);


где $table_mm массив нужных мне данных.

В итоге в гриде эти данные отражаются вполне нормально а вот разделение по страницам и управление страницами не работает. При нажати кнпки рефрэш в pagingtoolbar данные пропадают. подскажите всю голову уже сломал. куда копать?

Грубо говоря. Мне нужно в зависимости от фильтра подгружать в стор разные наборы данных и использовать механизм постраничного отображения.

С подгрузкой я справляюсь но механизм управления страницами перестаёт работать :(

Ex_Soft 17.12.2012 16:59

store.getProxy().data = myData;
store.load();
// ||
// store.loadPage(1);

???

XAPuTOH 18.12.2012 07:37

Кажись догнал в чем беда.

В примере стор грузит из массива столько сколько ему нужно в соответствии с настройками pagingtoolbar и т.д.

Во всех других примерах стор грузит из других источников.

В общем случае - в сторе прописан механизм получения данных из определённого источника и он получает столько сколько нужно для данной страницы. Т.е. в момент работы pagingtoolbar в стор загружено столько сколько нужно.

В примере выше - весь объем данных загружен в массив который является источником данных. и стор подгружает из него. Когда я загрузил данные напрямую в стор то весь механизм разделения на страницы рухнул.

как итог для меня видится следующий выход - объявление глобальной переменной myData и грузить данные в неё а потом делать релоад стора.

могу предположить что есть ещё вариант - управлять свойствами и функциями pagingtoolbar - т.е. помимо загрузки из пхп данных еще и его свойства обновлять. но это хз пока как сделать.

Ex_Soft 18.12.2012 12:09

Ext.Loader.setConfig({
	enabled: true,
	disableCaching: false,
	paths: {
		"Ext.ux": "../../../../../../../ExtJS/ExtJS4/ExtJS4.1.1a/examples/ux"
	}
});

Ext.require([
	"Ext.ux.data.PagingMemoryProxy"
]);

Ext.define("TestModel", {
    extend: "Ext.data.Model",
    idProperty: "id",
    fields: [
        { name: "id", type: "int" },
        { name: "name", type: "string" }
    ]
});

Ext.onReady(function() {
    var
        maxRecordsCount = 50000,
        pageSize = 150,
        createData = function(max) {
            var
                data = [];

            for(var i=0; i<max; ++i)
                data.push( [ i, "Record# "+i ] );

            return data;
        },
        data = createData(maxRecordsCount),
        store = Ext.create("Ext.data.ArrayStore", {
            model: "TestModel",
            pageSize: pageSize,
            proxy: {
                type: "pagingmemory",
                reader: {
                    type: "array"
                }
                //, data: data // need store.load() || store.loadPage()
            }
            //, data: data // store loads data automatically
        }),
        grid = Ext.create("Ext.grid.Panel", {
            store: store,
            columns: [
                { dataIndex: "id", header: "id" },
                { dataIndex: "name", header: "name" }
            ],
            selModel: {
                pruneRemoved: false
            },
            multiSelect: true,
            viewConfig: {
                trackOver: false
            },
            dockedItems: [{
                xtype: "pagingtoolbar",
                dock: "bottom",
                store: store,
                displayInfo: true
            }]
        });

    Ext.create("Ext.window.Window", {
        autoShow: true,
        layout: "fit",
        height: 400,
        width: 1100,
        maximizable: true,
        items: [grid]
    });

    store.getProxy().data = data;

    store.load();
    //store.loadPage(1);
});


P.S. Если Вы посмотрите исходники Ext.ux.data.PagingMemoryProxy (ExtJS/examples/ux/data/PagingMemoryProxy.js), то Вы увидите, что PagingMemoryProxy хранит ВСЕ данные в себе.

XAPuTOH 19.12.2012 07:46

Спасибо! Разобрался с Вашей помощью!


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