Nano Hash - криптовалюты, майнинг, программирование

Как применить фильтр в ExtJS

Я использую :

Ext.ux.grid.FiltersFeature

Он отлично работает, но всякий раз, когда я загружаю данные своего магазина

tablePanel.store.loadData(..)

фильтры не соблюдаются. Столбцы визуально выбираются как отфильтрованные (т. е. выделенные серым цветом), но отображаются все строки вместо отфильтрованного подмножества строк.

Вот ошибка, обнаруженная в JSFiddle:

http://jsfiddle.net/oliverwatkins/7hbt79bj/4/

Чтобы воспроизвести мою проблему:

  • Выберите фильтр столбца по имени, чтобы значение «foo»
  • Теперь должна отображаться только одна строка (строка foo)
  • Теперь нажмите «Сброс».
  • Фильтр настроен на отображение только «foo», но также показывает «bar».

Я знаю, что есть метод, который удаляет фильтры:

grid.store.clearFilter();

Я ищу такой метод:

grid.store.applyFilters();

Поэтому я могу выполнить его после обновления данных в своей таблице.

** ОБНОВЛЕНИЕ **

Если я копну немного глубже, я увижу, что на панели таблицы устанавливается строка фильтра.

tablePanel --> фильтры --> фильтры --> элементы --> [1] --> inputItem --> value = 'mySearchString'

Однако это фильтры на tablePanel. Если вместо этого я посмотрю на tablePanel-->store, я найду фильтры без установленных элементов:

tablePanel --> store --> фильтры --> фильтры --> элементы --> [0]

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

Еще больше бесит то, что в store есть метод filter, а в grid нет метода filter.

grid.store.filter(); //method exists

grid.filter(); //crashes

озадачивает..

05.08.2014

  • Если столбцы показывают, что они фильтруются, а результаты — нет, возможно, значения фильтра неправильно передаются на ваш сервер (при условии, что вы используете удаленную фильтрацию). 05.08.2014
  • не используя удаленную фильтрацию 05.08.2014
  • Ну, даже с локальной фильтрацией, если фильтр активен и имеет значение, он должен применяться при обновлении хранилища. Работают ли фильтры, если вы активируете их, используя его меню в меню столбца? 05.08.2014
  • хм да нормально работает. это просто загрузка магазина. Нужно ли мне делать что-то вроде store.refresh() после выполнения store.loadData()? 05.08.2014
  • Глядя на исходный код loadData, кажется, что он проверяет, установлено ли значение filterOnLoad в true, и если да, то вызывает метод filter. Я знаю, что это использует фильтрацию хранилища по умолчанию, но, возможно, FiltersFeature тоже использует ее. Итак, вы можете попробовать добавить filterOnLoad: true и (я предполагаю, что это уже установлено) remoteFilter: false в конфигурацию вашего магазина. 05.08.2014
  • Я пробовал filterOnLoad: true и remoteFilter:false в магазине, и он не работает :( Я также пробовал store.filter(), который, хотя метод существует, ничего не делает с тем, что я вижу 05.08.2014

Ответы:


1

Я использовал вашу скрипку и придумал решение, которое устанавливает значения после загрузки магазина. После grid.store.loadData я добавил этот код, который повторно применяет фильтры один за другим.

var filterData = grid.filters.getFilterData();
Ext.Array.each(filterData, function(filter){
    grid.filters.filters.getByKey(filter.field).setValue(filter.data.value)
})
16.08.2014
  • немного раздражает задержка в 1 секунду ... но я дам вам это :) 16.08.2014

  • 2

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

    Поэтому используйте только API, определенный FiltersFeature и все должно работать как положено. Например, чтобы очистить фильтры, используйте:

     grid.filters.clearFilters()
    
    05.08.2014
  • да, но я не вижу такого метода, как grid.filters.applyFilters(). 05.08.2014
  • Существуют addFilters и addFilter< /а> методы. Разве они не делают? 06.08.2014
  • да фильтры добавляют. Но у меня уже добавлены фильтры и ничего не происходит. (см. выше). Это похоже на то, что фильтр хранилища и фильтры сетки не разговаривают друг с другом. 06.08.2014
  • Да, это может быть ошибка в Ext или приложении. Можете ли вы подготовить рабочую презентацию на fiddle.sencha.com? Я бы посмотрел. 06.08.2014
  • пытаюсь, но не знаю, как импортировать FiltersFeature. (См. мой последний вопрос на StackOverflow) 06.08.2014
  • Я сбит с толку, я думал, вы уже используете сетку с фильтрами, не так ли? 07.08.2014
  • да. я использую его, но я никогда раньше не выполнял загрузку данных с установленным фильтром столбца. Мне нужно получить работающий пример, но я не знаю, как импортировать FiltersFeature в мой jsfiddle. 07.08.2014
  • jsfiddle или сенча скрипка? Я не пробовал, но полагаю, что функция фильтров уже должна быть частью скрипки сенчи. 07.08.2014
  • sencha fiddle также не работает: fiddle.sencha.com/#fiddle/8j5 может т найти функцию фильтров 07.08.2014
  • Хм, должно сработать. По крайней мере эта скрипка работает. 08.08.2014
  • У вас есть FiltersFeature как ресурс Fiddle. Не знаете, как добавить ресурс в SenchaFiddle. Кажется довольно запутанным. 08.08.2014
  • @ Саки: моя награда истекает через 4 дня. Просто говорю' ;) 14.08.2014
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..