使用KnockoutJS应用多个过滤器

时间:2014-04-23 12:57:33

标签: javascript knockout.js

我一直在关注本教程: 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/

1 个答案:

答案 0 :(得分:0)

如果您只是循环遍历所有过滤器以确定在您计算的filteredPeople中哪个isSelected设置为true,那么当self.filters数组中的任何过滤器上的一个isSelected observable变化时,它应自动更新。此外,如果您有能力添加过滤器,则需要将self.filters定义为observableArray本身。