В качестве обновления я расширил эту функцию и изменил ее для работы с ExtJS 4.1.1
Вот пример функции для динамической установки сеточных фильтров (без необходимости нажимать пункты меню). После этого отфильтрованные элементы будут видны пользователю в меню заголовка столбца сетки, как если бы он щелкнул по ним и установил их вручную.
Аргумент "grid" - это сетка с FiltersFeature
, которую вы хотите отфильтровать. Другой аргумент - массив объектов «фильтр» (я покажу пример ниже), функция просто применяет все переданные объекты «фильтр» к сетке.
doGridFilter: function(grid, filters) {
// for each filter object in the array
Ext.each(filters, function(filter) {
var gridFilter = grid.filters.getFilter(filter.field);
gridFilter.setActive(true);
switch(filter.data.type) {
case 'date':
var dateValue = Ext.Date.parse(filter.data.value, 'm/d/Y'),
value;
switch (filter.data.comparison) {
case 'gt' :
value = {after: dateValue};
break;
case 'lt' :
value = {before: dateValue};
break;
case 'eq' :
value = {on: dateValue};
break;
}
gridFilter = log.filters.getFilter(filter.field);
gridFilter.setValue(value);
gridFilter.setActive(true);
break;
case 'numeric':
var value;
switch (filter.data.comparison) {
case 'gt' :
value = {gt: filter.data.value};
break;
case 'lt' :
value = {lt: filter.data.value};
break;
case 'eq' :
value = {eq: filter.data.value};
break;
}
gridFilter = log.filters.getFilter(filter.field);
gridFilter.setValue(value);
gridFilter.setActive(true);
break;
case 'list':
gridFilter = log.filters.getFilter(filter.field);
gridFilter.menu.setSelected(gridFilter.menu.selected, false);
gridFilter.menu.setSelected(filter.data.value.split(','), true);
break;
default :
gridFilter = log.filters.getFilter(filter.field);
gridFilter.setValue(filter.data.value);
break;
}
});
}
Вот пример массива объектов «filter».
// an example of a "filters" argument
[{
field: 'some_list_column_data_index',
data: {
type: 'list',
value: 'item1,item2,item3,item4,item5,item6,item7'
}
}, {
field: 'some_date_column_data_index',
data: {
type: 'date',
comparison: 'gt',
value: '07/07/2007'
}
}]
Одно предостережение: вам нужно «создать» фильтры вручную перед использованием этой функции. Обычно FiltersFeature
сеточные фильтры «создаются» при первом нажатии пользователем одного из них, что может не произойти, если пользователь просто хочет применить один из этих предопределенных фильтров.
Это можно легко сделать, включив этого слушателя последующего события в сетку.
listeners: {
// must create the filters after grid is rendered
afterrender: function(grid) {
grid.filters.createFilters();
}
}