我一直在关注本教程: http://ryanrahlf.com/filtering-table-data-with-knockout-js/ 我想知道是否有办法应用多个过滤器。我是一般的网页设计新手,在淘汰赛或者javascript时我都不会受到我的影响。我发现了另一个类似的问题,它有一个建议的解决方案,但没有工作代码示例。一旦我进入计算过滤后的人,我一直在努力让它运作起来,所以我已经把它留给了这个问题。
self.filters = [
{title:'Show All', filter: null, isSelected: ko.observable(false)},
{title:'Only Smith', filter: function(item){return item.lastName == 'Smith';}, isSelected: ko.observable(false)},
{title:'Only Jones', filter: function(item){return item.lastName == 'Jones';}, isSelected: ko.observable(false)},
{title:'Only Adults', filter: function(item){return item.age >= 18; }}
];
self.filteredPeople = ko.computed(function(){
var result;
if(self.activeFilter()){
result = ko.utils.arrayFilter(self.people(), self.activeFilter());
}
else{
result = self.people;
}
return result.sort(self.activeSort());
}
所以我要问的是如何根据filters数组中的.isSelected()属性将self.filteredPeople更改为自动更新和链接过滤器?我想删除.activeFilter()和.setActiveFilter()方法并使用isSelected observable。
类似的问题有一个答案: Adding and removing multiple filters in Knockout JS
我的JSFiddle完整代码: http://jsfiddle.net/L4Lsm/
答案 0 :(得分:0)
如果您只是循环遍历所有过滤器以确定在您计算的filteredPeople中哪个isSelected设置为true,那么当self.filters数组中的任何过滤器上的一个isSelected observable变化时,它应自动更新。此外,如果您有能力添加过滤器,则需要将self.filters定义为observableArray本身。