我一直在关注这个教程:http://ryanrahlf.com/filtering-table-data-with-knockout-js/和我想知道是否有一种方法可以应用多个过滤器。一般来说,我是网页设计的新手,对于knockout或javascript,我并不熟悉。我发现了另一个类似的问题,它有一个建议的解决方案,但没有工作的代码示例。一旦我到了filteredPeople计算器,我就一直在努力让它工作,所以我把它留在这个问题上。
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/
发布于 2014-04-23 21:35:17
如果您只是遍历所有筛选器,以确定在计算的filteredPeople中将isSelected设置为true的筛选器,那么一旦self.filters数组中的任何筛选器上的一个isSelected可观测对象发生更改,它就应该自动更新。此外,如果您能够添加筛选器,则需要将self.filters定义为observableArray本身。
https://stackoverflow.com/questions/23245034
复制相似问题