Всем привет! Нужна помощь по нокауту. Есть массив объектов:
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;
});
};