【问题标题】:Knockoutjs ObservableArray ArrayFilter on multiple columns多列上的 Knockoutjs ObservableArray ArrayFilter
【发布时间】:2015-10-06 07:06:39
【问题描述】:

我正在尝试通过多个列过滤 ObservableArray。

我的问题与question 类似,但我的模型不同,因为可观察数组中的每个条目都是可观察对象。

var Employee = function(name, job, state, phone)
{
    this.name = ko.observable(name);
    this.job = ko.observable(job);
    this.state = ko.observable(state);
    this.phone = ko.observable(phone);
};

self.employees = ko.observableArray([
    new Employee("Sarah","Manager","","123456"),
    new Employee("Michelle","Receptionist","California",""),
    new Employee("James","","Florida","1213123"),
    new Employee("Steve","","Team Lead",""),
    new Employee("Britney","","Developer","")
]);

我的数组以表格的形式呈现,并且具有用户过滤每一列的空值的功能。

我正在处理要过滤的动态列列表(也取自 observablearray)

self.rowheader = ko.observableArray(["Name","Job","State","Phone" ]);

我似乎无法弄清楚如何使用 ko.utils.arrayFilter 将这些值映射并评估为条件

这是我目前所在位置的JSFiddle。 感谢您的帮助

【问题讨论】:

    标签: knockout-3.0


    【解决方案1】:

    我已经设法找到了解决方案,但我仍然希望有人能提出更优雅的解决方案。

    我要根据 selectedColumns 内容动态构造arrayFilter函数的返回条件。现在,filteredArray observable 看起来像这样:

    self.filteredemployees = ko.computed(function() {
        if(self.selectedColumns().length) {
            return ko.utils.arrayFilter(self.employees(), function(emp) {
                var filter = ko.utils.arrayMap(self.selectedColumns(), function(item) {
                                return 'emp.' + item.toLowerCase() + '() === ""';
                            }).join(' && ');
    
                return eval(filter)
            });
        } else {
            return self.employees();
        }
    }, self);
    

    我别无选择,只能在那里进行评估。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-10
      • 1970-01-01
      相关资源
      最近更新 更多