Как сделать реконфигурацию фильтра динамического Grid?
Есть динамический грид, который изначально загружается с пустым 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 } }); } } }, }); |
Часовой пояс GMT +3, время: 18:59. |