Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 11.05.2015, 17:12
Аспирант
Отправить личное сообщение для nastya Посмотреть профиль Найти все сообщения от nastya
 
Регистрация: 10.02.2009
Сообщений: 37

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;
      });

  };
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужна помощь по javascript darklend Общие вопросы Javascript 0 12.01.2014 23:33
Нужна помощь: Slider wheel Alex555 Мобильный JavaScript 0 15.05.2013 18:06
Нужна помощь по слайдеру seoguru Работа 3 28.01.2013 22:02
Нужна помощь с javascript Leslie Оффтопик 0 18.12.2012 01:40
нужна помощь dominosoko Серверные языки и технологии 4 14.03.2010 02:17