Программное применение фильтра сетки из функции

Используя 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});
                }
            }
        }
    }
});

Я также обнаружил, что эта функция работает в первый раз, если я нажму на любое меню заголовка сетки перед запуском функции.

Я пытался выяснить, какие изменения были внесены в сетку, чтобы заставить фильтр работать после неудачной первой попытки, или что делает щелчок по любому заголовку сетки, чтобы заставить его работать. Но ничего из того, что я добавляю, похоже, не исправляет это, поэтому оно запустится с первого раза. Кто-нибудь успешно это реализовал?

6
задан Acinom Etatsnier 9 March 2012 в 05:48
поделиться