Используя Ext.ux.grid.FiltersFeature, У меня есть удаленные фильтры, и я пытаюсь написать функцию для программного применения фильтра даты к столбцу сетки (вместо того, чтобы щелкнуть раскрывающееся меню фильтра в заголовке столбца). При первом запуске функции хранилище сетки перезагружается без фильтра.Когда я запускаю функцию во второй раз (и каждый раз после этого), она работает совершенно нормально, магазин перезагружается с фильтрами. Вот суть функции, которая у меня есть:
// a filter object for testing
aFilter = {type: 'date', field: 'a_date_field', comparison: 'gt', value: '2012-03-08 00:00:00'}
var grid = Ext.create('Ext.grid.Panel', {
store: store,
features: [{
ftype: 'filters',
}],
columns[{
header: 'ID',
dataIndex: 'id',
itemId: 'id',
width: 40,
}, {
xtype: 'datecolumn',
header: 'Date',
dataIndex: 'a_date_field',
itemId: 'a_date_field',
width: 75,
format:'j-M-Y',
filterable: true
}],
listeners: {
'afterrender': function() {
// Need to create the filters as soon as the grid renders
// rather than waiting for the user to click on the header
grid.filters.createFilters();
}
},
bbar: [{
text: 'Do a filter',
handler: function() {
// get the filter that is attached to the grid
var gridFilter = grid.filters.getFilter(aFilter.field);
// have to do this to create a menu for this filter
gridFilter.init({dataIndex: aFilter.field, type: aFilter.type, active: true});
// if this column is a date filter column
if (gridFilter.type == 'date') {
var dateValue = Ext.Date.parse(aFilter.value, 'Y-m-d H:i:s');
if (filter.comparison == 'gt') {
gridFilter.setValue({after: dateValue});
} else {
gridFilter.setValue({before: dateValue});
}
}
}
}
});
Я также обнаружил, что эта функция работает в первый раз, если я нажму на любое меню заголовка сетки перед запуском функции.
Я пытался выяснить, какие изменения были внесены в сетку, чтобы заставить фильтр работать после неудачной первой попытки, или что делает щелчок по любому заголовку сетки, чтобы заставить его работать. Но ничего из того, что я добавляю, похоже, не исправляет это, поэтому оно запустится с первого раза. Кто-нибудь успешно это реализовал?