Есть динамический грид, который изначально загружается с пустым columnModel, потом в зависимости от данных в сторе делается переконфигурация с гридом..., аналогично пробую сделать с фильтром для грида, но переконфигурировать фильтр, для грида... пробовал простым присвоение, не работает ((
Пример кода:
var ReaderData= new Ext.data.JsonReader();
var dataStore = new Ext.data.Store ({
// ** конфигурация хранилища store
//** PROXY *************
url: 'block/modules/Projects_reports/handlers/get_data.php',
reader: ReaderData, // наш JsonReader
//writer: Writer,
listeners: {
load : function(obj, records) {
} // eo load
, metachange: function(obj, meta) {
console.info('получили метаданные');
function SetColModel(meta) {
// значения по умолчанию
var defs = {
filterable: true
, width: 120
}
var cols = [];
// заполняем массив колонок
Ext.each(meta.fields, function(fld, idx){
cols[idx] = {
// если заголовок не указан, будем использовать имя поля
header: fld.header ? fld.header : fld.name
, dataIndex: fld.name
// если sortable=0, то false, в остальных случаях true
, sortable: parseInt(fld.sortable) == 0 ? false : true
// если ширина не указана, берем из defs
, width: parseInt(fld.width) ? parseInt(fld.width) : defs.width
}
}); // eo each
//console.log(cols);
var cm = new Ext.grid.ColumnModel({
}); // eo cm
cm.setConfig(cols); // устанавливаем конфигурацию колонок
//console.info(cm);
return cm;
};
// функция построения модели колонок по метаданным
cm = SetColModel(meta);
var grid = Ext.getCmp('grid_w');
var filterCfg =
{
local: 'true',
filters: []
};
// this is the important part
for (var column in cm.lookup)
{
var i = cm.lookup[column].dataIndex;
if (i)
{
// map float and int field types to numeric
var t = grid.store.fields.map[i].type.type;
if (t === 'int' || t === 'float') t = 'numeric';
else t = 'string';
// add filter
filterCfg.filters.push(
{
dataIndex: i,
type: t
});
}
}
var filters = new Ext.ux.grid.GridFilters(filterCfg);
console.log(filters);
// получить ссылку на grid
// применить новые колонки к гриду
grid.reconfigure(this, cm);
grid.filters = filters;
} // eo metachange
} // eo listener
}); // eo store
var def_cm = new Ext.grid.ColumnModel({
id: 'cm',
// свойства по умолчанию
defaults: {
filterable: false // отключаем фильтрацию, иначе ругается
},
columns: [] // пустой массив !!!
});
// define initial filter config
var filters = new Ext.ux.grid.GridFilters();
var grid = new Ext.grid.EditorGridPanel({
id: 'grid_w',
store: dataStore, // хранилище
plugins: filters,
cm: def_cm, // пустая модель колонок
listeners: {
rowdblclick: {
fn: function(e, rowIdx, r){
//create_ContragentView(e.store.data.items[rowIdx].id);
}
},
render: {
fn: function(){
dataStore.load({
params: {
start: 0,
limit: 50
}
});
}
}
},
});