@xwild

Как сделать связанные селекты на Knockout.js?

Есть к примеру 5 select'ов, списки атрибутов для продуктов, у продуктов некоторые аттрибуты могут пересекаться, некоторые нет.

При выборе значения любого из них, идет обращение к backend, который фильтрует возможные значения всех select'ов (текущего select'а тоже), то есть приводит в согласованное состояние все списки, после этого нужно выбрать сами значения select'ов на первые из списков, если они не были выбраны до этого.

Проблема возникает из-за рекурсивности, то есть обращение к backend идет по событию смены значения select'a (.subscribe), но после того как значения получены, нужно сменить значения других select'ов и получается нужно делать опять запросы.

Может быть knockout для этого не предназначен? Буду благодарен за любые подсказки.
  • Вопрос задан
  • 298 просмотров
Пригласить эксперта
Ответы на вопрос 1
@exedealer
можно завернуть observable'ы от все селектов в один computed observable с rateLimit: 0 и подписываться на изменения этого одного computed observable'а.

var filterOne = ko.observable();
var filterTwo = ko.observable();
var aggregatedFilter = ko.pureComputed(function () {
    return { filterOne: filterOne(), filterTwo: filterTwo() };
}).extend({ rateLimit: 0 /* уведомляем только один раз при нескольких подряд идущих мутациях */ });

aggregatedFilter.subscribe(function (aggregatedFilterValue) {
   // используем aggregatedFilterValue в запросе
});
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы