опять 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, время: 04:32. |