Arrays 基于选中复选框列表的淘汰数组筛选器
我正在努力根据左侧协议下复选框列表的选择筛选正文中的列表,请参见“请帮助”Arrays 基于选中复选框列表的淘汰数组筛选器,arrays,knockout.js,filter,Arrays,Knockout.js,Filter,我正在努力根据左侧协议下复选框列表的选择筛选正文中的列表,请参见“请帮助” filteredRecords: function(){ return ko.utils.arrayFilter(viewModel.protocoldocs,function(protocoldoc){ var flag = false; foreach(selprotocol in viewModel.selectedprotocol) { if
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;
})};
您可以使用一个计算的可观测值来实现此目的,如下所示
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}">
你可以在这里找到一个工作样本谢谢你,山姆。你救了我一天。这就是我要找的。我唯一要做的就是将compute函数中的return p.id==item.id更改为return p.name==item.pronumber,这样它将根据协议编号而不是id进行过滤。我将在site、branchs等下面添加更多过滤器复选框,并修改您创建的计算函数以获得过滤结果。让我知道这是不是正确的方向。谢谢您!
function protocol(id, name) {
this.id = id;
this.name = name;
this.selected = ko.observable(false);
}