ExtJS сетевая фильтрация - активация двух одновременно - PullRequest
1 голос
/ 23 марта 2012

У меня есть следующий код для фильтрации сетки по значениям, введенным в форму одним нажатием кнопки.Проблема заключается в том, что при первой активации фильтров в запрос будет включен только первый фильтр (displayNameFilter).

Во второй раз оба фильтра будут включены в запрос.Как я могу обойти эту проблему?

var nameFilter = grid.filters.getFilter('name');

if (!nameFilter) {
    nameFilter = grid.filters
            .addFilter({
                type : 'string',
                dataIndex : 'name'
            });
}
nameFilter.setValue(Ext.getCmp('name-filter').getValue());

var displayNameFilter = grid.filters.getFilter('displayName');

if (!displayNameFilter) {
    displayNameFilter = grid.filters
            .addFilter({
                type : 'string',
                dataIndex : 'displayName'
            });
}

displayNameFilter.setValue(Ext.getCmp('display-name-filter').getValue());

displayNameFilter.setActive(true, false);
nameFilter.setActive(true, false);

Ответы [ 2 ]

2 голосов
/ 26 марта 2012

Это сработало для меня:

handler : function() {

    var filters = [];

    // get filters from a form...
    var values = filterForm.getValues();
    for (var f in values) {
        var value = values[f];
        if (value) {
            filters.push({ property: f, value: value });
        }
    }

    //...and add all of them to the store used by the grid directly
    if (filters.length) {
        // prevent events firing here...
        gridStore.clearFilter(true);
        // ...because they will fire here
        gridStore.filter(filters);
    } else {
        gridStore.clearFilter();
    }
}
2 голосов
/ 24 марта 2012

У меня была похожая проблема. Решение немного простое, но оно работает для меня, обратите внимание, что переменная фильтра определяется во второй раз в вызове defer (это необходимо):

grid.filters.createFilters();
var nameFilter = grid.filters.getFilter('name');
if (!nameFilter) {
    nameFilter = grid.filters
            .addFilter({
                type : 'string',
                dataIndex : 'name'
            });
}
nameFilter.setActive(true);
var displayNameFilter = grid.filters.getFilter('displayName');
if (!displayNameFilter) {
    displayNameFilter = grid.filters
            .addFilter({
                type : 'string',
                dataIndex : 'displayName'
            });
}
displayNameFilter.setActive(true);
Ext.Function.defer(function() {
    nameFilter = grid.filters.getFilter('name');
    nameFilter.setValue(Ext.getCmp('name-filter').getValue());
    displayNameFilter = grid.filters.getFilter('displayName');
    displayNameFilter.setValue(Ext.getCmp('display-name-filter').getValue());
}, 10);
...