多列上的 Knockoutjs ObservableArray ArrayFilter
Knockoutjs ObservableArray ArrayFilter on multiple columns
我正在尝试通过多个列过滤 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","")
]);
我的数组显示为 table 并且将具有一个功能供用户过滤每列的空值。
我正在处理要过滤的动态列列表(也取自 observablearray)
self.rowheader = ko.observableArray(["Name","Job","State","Phone" ]);
我似乎无法弄清楚如何映射这些值并将它们评估为使用 ko.utils.arrayFilter
的条件
这是 JSFiddle 我现在所在的位置。
感谢您的帮助
我已经设法找到了解决方案,但我仍然希望有人可以为此提出更优雅的解决方案。
我必须根据 selectedColumns 内容动态构建 arrayFilter 函数的 return 条件。 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);
我别无选择,只能在那里进行评估。
我正在尝试通过多个列过滤 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","")
]);
我的数组显示为 table 并且将具有一个功能供用户过滤每列的空值。
我正在处理要过滤的动态列列表(也取自 observablearray)
self.rowheader = ko.observableArray(["Name","Job","State","Phone" ]);
我似乎无法弄清楚如何映射这些值并将它们评估为使用 ko.utils.arrayFilter
的条件这是 JSFiddle 我现在所在的位置。 感谢您的帮助
我已经设法找到了解决方案,但我仍然希望有人可以为此提出更优雅的解决方案。
我必须根据 selectedColumns 内容动态构建 arrayFilter 函数的 return 条件。 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);
我别无选择,只能在那里进行评估。