опять 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 данные пропадают. подскажите всю голову уже сломал. куда копать? Грубо говоря. Мне нужно в зависимости от фильтра подгружать в стор разные наборы данных и использовать механизм постраничного отображения. С подгрузкой я справляюсь но механизм управления страницами перестаёт работать :( |
store.getProxy().data = myData; store.load(); // || // store.loadPage(1); ??? |
Кажись догнал в чем беда.
В примере стор грузит из массива столько сколько ему нужно в соответствии с настройками pagingtoolbar и т.д. Во всех других примерах стор грузит из других источников. В общем случае - в сторе прописан механизм получения данных из определённого источника и он получает столько сколько нужно для данной страницы. Т.е. в момент работы pagingtoolbar в стор загружено столько сколько нужно. В примере выше - весь объем данных загружен в массив который является источником данных. и стор подгружает из него. Когда я загрузил данные напрямую в стор то весь механизм разделения на страницы рухнул. как итог для меня видится следующий выход - объявление глобальной переменной myData и грузить данные в неё а потом делать релоад стора. могу предположить что есть ещё вариант - управлять свойствами и функциями pagingtoolbar - т.е. помимо загрузки из пхп данных еще и его свойства обновлять. но это хз пока как сделать. |
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 хранит ВСЕ данные в себе. |
Спасибо! Разобрался с Вашей помощью!
|
Часовой пояс GMT +3, время: 15:51. |