2015-12-03 2 views
1

Я изо всех сил пытаюсь отфильтровать список в теле на основе выбора списка флажков по протоколу слева, см. На jsfiddle, пожалуйста, помогите.фильтр нокаутных массивов на основе выбранного списка флажков

filteredRecords: function(){ 
     return ko.utils.arrayFilter(viewModel.protocoldocs,function(protocoldoc){ 
      var flag = false; 
    foreach(selprotocol in viewModel.selectedprotocol) 
    { 

     if(selprotocol.id === protocoldoc.pronumber) 
     flag = true;  
    } 
    return flag; 
     })}; 

ответ

2

Вы можете использовать вычисленный наблюдаемый для этой цели, как ниже

viewModel.filteredProtocols = ko.computed(function() { 
    var selectedProtocols = ko.utils.arrayFilter(viewModel.protocol(), function (p) { 
    return p.selected(); 
    }); 
    if (selectedProtocols.length == 0) //if none selected return all 
    return viewModel.protocoldocs(); 
    else { //other wise only return selected protocoldocs 
    return ko.utils.arrayFilter(viewModel.protocoldocs(), function (item) { 
     return ko.utils.arrayFilter(selectedProtocols, function (p) { 
     return p.id == item.id 
     }).length > 0; 
    }); 
    } 
}) 

и связать свой результат таблицу к этому filteredProtocol. Несколько вещей, которые я также модифицирована являются

Я добавил выбранный флаг для протокола, чтобы сохранить проверенные значения

<input type="checkbox" data-bind="checked:selected, attr: {id: 'checkBox' + id}"> 

...

function protocol(id, name) { 
    this.id = id; 
    this.name = name; 
    this.selected = ko.observable(false); 
} 

вы можете найти рабочий образец здесь http://jsfiddle.net/prc4pqnm/3/

+0

Спасибо Сэм. ты спасаешь мой день. это то, что я искал. единственное, что мне пришлось изменить в функции вычисления из return p.id == item.id, чтобы вернуть p.name == item.pronumber, чтобы он отфильтровывался на основе номера протокола, а не идентификатора. – user5635673

+0

, и я добавлю дополнительные флажки фильтров под сайт, ветви и т. Д. И изменим вычисленную функцию, созданную для получения отфильтрованного результата. дайте мне знать, если это правильное направление. Спасибо! – user5635673

Смежные вопросы