我目前正在使用Knockback.js创建一个页面,该页面将在表中显示员工的任务。我有一个任务的视图模型,其中包含一个名为isSelected的布尔值。员工的视图模型包含任务视图模型集合的集合,该集合称为“任务”。
现在我想添加一个名为“selectedTasks”的属性/函数/可观察到的属性,它只公开所选的任务。我想满足以下要求:
为了更清楚地演示它,我创建了这个jsfiddle:http://jsfiddle.net/drojoke/cg6d88Lp/14/
到目前为止,我只使用一个可观察到的集合来实现“任务”属性的所有功能,如下所示:
this.tasks = kb.collectionObservable(tasks, {
view_model: function (task) {
return new TaskViewModel(task);
}
});我使用view_model选项将任务集合中的每个任务转换为TaskViewModel。当我将一个新任务添加到任务集合中时,CollectionObservable将被更新为exptected。
我尝试将selectedTasks属性创建为带有筛选器选项的CollectionObservable,如下所示:
this.selectedTasks = kb.collectionObservable(tasks, {
view_model: function (task) {
return new TaskViewModel(task);
}, filters: function (task) {
return task.isSelected(); // isSelected is undefined.
}
});但是不幸的是,传递给filters函数的对象不是TaskViewModel,而是一个任务对象,因此我无法访问isSelected。
对于过滤视图模型集合而不是模型,我找不到很多。我如何创建一个可观察到的selectedTasks来过滤视图模型而不创建其他视图模型?
发布于 2014-10-21 08:34:40
您可以简单地使用计算可观测值
this.selectedTasks = ko.computed(function() {
return this.tasks().filter(function(task) {
return task.isSelected();
});
}, this);https://stackoverflow.com/questions/26481544
复制相似问题