Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 08.11.2019, 22:29
Профессор
Отправить личное сообщение для Shitbox2 Посмотреть профиль Найти все сообщения от Shitbox2
 
Регистрация: 04.10.2010
Сообщений: 571

Взаимосвязанные фильтры
Есть список товаров и несколько связанных с ним и друг с другом фильтров. Например: страна, город, сеть магазинов. Страна-город - связь один ко многим, сеть магазинов - многие ко многим. Т.е., при выборе сетей магазинов должны ограничиваться города и соответственно страны теми, где эта сеть представлена (а так же удаляться ранее выбранные, если в них ничего нет). И наоборот. В общем всё влияет на всё.

Это пример. Фильтров может быть больше и логика сложнее. Существует ли более-менее универсальный js-плагин для фильтрации связанных списков? Можно не только на js, хоть на Питоне

Последний раз редактировалось Shitbox2, 08.11.2019 в 22:33.
Ответить с цитированием
  #2 (permalink)  
Старый 09.11.2019, 01:14
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Shitbox2
Можно не только на js, хоть на Питоне
... WHERE field1 = val [AND | OR field2 = val ....]

SQL тоже язык, в других языках суть та же самая. Так какая вам нужна универсальность если фильтр, это условия, которых может быть от 0 до N, или что подразумевается под универсальностью?
Ответить с цитированием
  #3 (permalink)  
Старый 09.11.2019, 07:38
Профессор
Отправить личное сообщение для Shitbox2 Посмотреть профиль Найти все сообщения от Shitbox2
 
Регистрация: 04.10.2010
Сообщений: 571

Набросал за ночь что-то такое:
const schema = {
      networkGateways: {
        affects: ['gatewayId=gateways.id', 'networkId=networks.id'],
        source: this.networkGateways
      },
      networks: {
        affects: ['id=networkGateways.networkId', '~countryId=countries.id'],
        source: this.networks
      },
      gateways: {
        affects: ['id=networkGateways.gatewayId'],
        source: this.gateways
      },
      countries: {
        affects: ['id=networks.countryId'],
        source: this.countries
      }
    };

    this.richFilter = new RichFilter(schema);

    const newFilteredLists = this.richFilter.update('countries', this.chosenCountryIds);

    Object.assign(this.filteredLists, newFilteredLists); // Дальше фреймворк обновит UI

newFilteredLists - объект с такими же полями как у schema, но вместо значений отфильтрованные списки с учетом всех зависимостей.

Не хочу писать велосипеды, может быть кто-то видел что-нибудь подобное?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Взаимосвязанные списки, с полем input karakym Общие вопросы Javascript 8 21.11.2016 09:04
Как сделать фильтры колонок ? Maybe_V ExtJS 3 11.05.2016 21:21
fancybox фильтры avsavs Элементы интерфейса 2 28.01.2016 17:54
фильтры цвета с прозрачностью. Siend (X)HTML/CSS 8 13.09.2015 12:59
Фильтры в гриде AlexTIX ExtJS 4 15.01.2014 17:25