Как мне сбросить все фильтры в сетках Extjs?

#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("");
 }