#extjs
#extjs
Вопрос:
Как мне сбросить мои фильтры ExtJS в моих сетках. Более конкретно, как мне заставить заголовок учитывать изменения в фильтрации.
ie. Это работает нормально :
grid.store.clearFilter();
Но рендеринг заголовка полностью неправильный. Мне нужно попасть во все объекты меню и снять флажки.
Я довольно сильно заблудился. Я почти уверен, что это дает мне filterItems :
var filterItems = grid.filters.filters.items;
И из каждого из этих элементов фильтра я могу перейти к пунктам меню следующим образом :
var menuItems = filter.menu.items;
Но это все, что я могу получить. Я ожидаю увидеть какой-то объект checkbox внутри пунктов меню, а затем я могу снять этот флажок, и, надеюсь, тогда рендеринг заголовка изменится.
Обновить :
Теперь у меня есть этот код. Фильтр в хранилище сеток очищен. Затем я получаю filterItems из grid.filters.filters.items и выполняю итерацию по ним. Затем я вызываю функцию для каждого из пунктов меню.
grid.store.clearFilter();
var filterItems = grid.filters.filters.items;
for (var i = 0; i<filterItems.length; i ){
var filter = filterItems[i];
filter.menu.items.each(function(checkbox) {
if (checkbox.setChecked)
checkbox.setChecked(false, true);
});
}
Флажки действительно вызываются, но по-прежнему ничего не происходит : (
Ответ №1:
Попробуйте этот код:
grid.filters.clearFilters();
Это должно позаботиться как о сетке, так и о ее базовом хранилище.
Когда вы делаете
grid.store.clearFilter();
он может очистить только фильтры в хранилище, но представление сетки не обновляется при этом вызове. Следовательно, чтобы обработать это автоматически как для просмотра сетки, так и для хранилища сетки, просто используйте
grid.filters.clearFilters();
Надеюсь, это поможет!
Приветствия!
Комментарии:
1. Рад быть любым полезным! Приветствия!
2. В моем случае grid.filters не определен! Помогите мне с альтернативой. Моя внешняя версия 6.5.1
Ответ №2:
Ваше обновление помогло мне, но вы забыли случай, когда у вас есть текст ввода вместо флажка.
Итак, это мое дополнение к вашему решению:
grid.filters.clearFilters();
var filterItems = grid.filters.filters.items;
for (var i = 0; i<filterItems.length; i ){
var filter = filterItems[i];
filter.menu.items.each(function(element) {
if (element.setChecked) {
element.setChecked(false, true);
}
if(typeof element.getValue !== "undefined" amp;amp; element.getValue() !== "") {
element.setValue("");
}
});
}
Ответ №3:
При использовании сетки с плагином gridfilters и inovoke
grid.filters.clearFilters();
он сбрасывает примененные фильтры, но не очищает значение в текстовом поле внутри меню.
Для очистки текстового поля text вы можете попробовать это:
grid.filters.clearFilters();
const plugin = grid.getPlugin('gridfilters');
let activeFilter;
if('activeFilterMenuItem' in plugin) {
activeFilter = plugin.activeFilterMenuItem.activeFilter
}
if (activeFilter amp;amp; activeFilter.type === "string") {
activeFilter.setValue("");
}