Удаление фильтра из магазина в ExtJS

Я явно добавляю фильтр к Ext.data.Store с помощью метода store.filter(string, string).

Однако я не могу понять, как удалить фильтры из магазина. Поэтому фильтры всегда применяются даже после перезагрузки с помощью store.load(). Единственным обходным решением, которое я вижу, является перезапуск всего веб-приложения.

Как удалить фильтр из Ext.data.Store?

Ответ 2

В дополнение к ответу Mchi, я хочу сказать, что можно удалить конкретный фильтр (clearFilter() удаляет их все). < ш > Чтобы сделать это, вместо использования метода store.filter('property_to_filter','value') используйте:

store.filters.add('filtersId', new Ext.util.Filter({
  property: 'property_to_filter',
  value: 'value'
}));
store.load();

чтобы удалить использование фильтра:

store.filters.removeAtKey('filtersId');

Обновление (для > 4.2.0)

В 4.2.0 добавлены методы добавления/удаления определенного фильтра:

store.addFilter({
    id: 'filtersId',
    property: 'property_to_filter',
    value: 'value'
});

store.removeFilter('filtersId');

Для получения дополнительной информации ознакомьтесь с документами: Ext.data.Store.addFilter, Ext.data.Store.removeFilter

Ответ 3

Изменить: Я только что узнал (просматривая API для чего-то еще), что он еще проще. Там параметр (boolean), который, если true, не перезагружает данные при использовании remoteFilter...

Итак, вот:

store.clearFilter(true);
store.filter(...);

Источник: Хранить API > clearFilter

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

Оригинальное сообщение:

"Вам нужно clearFilter()"

IMO, это абсолютно не удовлетворяет. При использовании серверного бэкэнда для получения данных (как многие из них) с remoteSort и remoteFilter + paging для управления большими наборами результатов это даже бесполезно.

Вызов clearFilter() фактически перезагружает данные перед повторным применением фильтра. Таким образом, 2 запроса ajax отправляются каждый раз, когда применяется фильтр. Это долгое время беспокоило меня.

Все, что вам нужно сделать, это на самом деле:

store.filters.clear(); // Which is what clearFilter() does just before reloading the data...
store.filter(...);