javascript - 使用 KnockoutJS 应用多个过滤器

标签 javascript knockout.js

我一直在关注这个教程: 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());
 }

所以我要问的是如何将 self.filteredPeople 更改为自动更新并将过滤器基于过滤器数组中的 .isSelected() 属性链接在一起?我想删除 .activeFilter() 和 .setActiveFilter() 方法并使用 isSelected observable。

类似的问题和某种答案: Adding and removing multiple filters in Knockout JS

我的 JSFiddle 包含完整代码: http://jsfiddle.net/L4Lsm/

最佳答案

如果你只是循环遍历你的所有过滤器来确定你的filteredPeople中哪个过滤器的isSelected设置为true,那么一旦self.filters数组中的任何过滤器上的isSelected可观察值之一发生变化,它应该自动更新。另外,如果您能够添加过滤器,您将需要将 self.filters 定义为 observableArray 本身。

关于javascript - 使用 KnockoutJS 应用多个过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23245034/

相关文章:

javascript - 使用 JavaScript 或 jQuery 提取特定类

javascript - 使用 JSX 的 React 替代方案

javascript - KnockoutJS - 单击按钮后数据绑定(bind)不会更改文本

javascript - 您将如何在单页应用程序和 knockout.js 中进行客户端验证

javascript - 如何为动态添加的图像绑定(bind)图像加载回调?

javascript - 模拟用户点击让一个元素出现在 DOM 中

javascript - jQuery 在所有事件的 CSS 转换完成后计算宽度和高度

javascript - Durandal 中的多级路由

javascript - knockout : what are the event available with evet handler

javascript - 降低 Node.js 套接字连接的超时时间