knockout нужна помощь с фильтрацией
Всем привет! Нужна помощь по нокауту. Есть массив объектов:
var data = ko.observableArray([{"id":"1","site":"site1","components": [{"id":"1", "name": "component1"}, {...}, {...}...]); Т.е. сайты и компоненты. Это выводится в табличке в виду дерева: 2 колонки(site, components), в заголовке каждой фильтр(multiple select), соотвественно первую колонку можно фильтровать по site, вторую по components.name. Например мы выбрали в первом селекте site1, а во втором component1 и только это и должно отобразиться в таблице. Собственно говоря, вопрос как это организовать. С фильтрацией сайтов у меня получилось, а вот с компонентами нет, а точнее они не апдейтятся в темплейте. <table> <th>site<br/> <select multiple="multiple" data-bind="selectedOptions: selectedSiteChoice, options: siteChoices"></select> </th> <th>Component<br/> <select multiple="multiple" data-bind="selectedOptions: selectedComponentChoice, options: componentChoices"> </select> .... </table> $("select").multipleSelect({ filter: true }); <tbody class="tree" data-bind="foreach: selectedSites"> <tr> <td wid... нокаут: me.selectedSites = ko.computed(function () { var currentSites = []; if (me.selectedComponentChoice().length) { if (me.currentSelectedSites().length > 0) { currentSites = _.each(me.currentSelectedSites(), function (site) { return site.componentTypes = _.filter(site.components, function(component){ return _.contains(me.selectedComponentChoice(), component.name); }); }); } } if (me.selectedSiteChoice().length) { currentSites = ko.utils.arrayFilter(me.sites(), function (site) { return (-1 != ko.utils.arrayIndexOf(me.selectedSiteChoice(), site.deploymentSite)); }); } if (currentSites.length == 0) { currentSites = me.sites(); } me.currentSelectedSites(currentSites); return currentSites; }); }; |
Часовой пояс GMT +3, время: 19:06. |