Knockout.Js 数组过滤器语法

2024-01-27

刚刚开始接触 javascript 和 knockout.js。我找到了很多我想要实现的目标的例子。我觉得我可能忽略了一个小语法错误。我正在尝试过滤已返回的集合(这个任务)通过 ajax/json 从服务器获取。我的那个工作得很好。我想做的是让用户能够在完成和不完整的任务之间切换。

我将代码切换为仅在tasksFiltered 上运行foreach 循环。 “this.done”要么是真,要么是假。

任务模板

var taskModel = function(id, title, description, done){
    var self = this;
    this.id = ko.observable(id);
    this.title = ko.observable(title);
    this.description = ko.observable(description);
    this.done = ko.observable(done);

    this.showEdit = ko.observable(false);
    this.titleUpdate = ko.observable(false);
    this.descriptionUpdate = ko.observable(false);
};

页面模型

var pageModelTasks = function(){
    var self = this;
    this.task_title = ko.observable("");
    this.task_description = ko.observable("");
        this.task_title_focus = ko.observable(true);
    this.tasks = ko.observableArray([]);

    this.tasksFiltered = ko.computed(function() {
        return ko.utils.arrayFilter(this.tasks, function(Task) {
        return Task.done == true;
      });
    });

   // CRUD functions excluded 
}; 

这是行不通的。


对您的代码进行了两处小修正。首先,正如@XGreen提到的,您需要传递数组值,notobservableArray 实例,作为第一个参数arrayFilter功能。最后,因为Task.done是可观察的,需要调用成员来获取值。这是修改后的代码:

this.tasksFiltered = ko.computed(function() {
    return ko.utils.arrayFilter(this.tasks(), function(Task) {
        return Task.done() === true;
    });
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Knockout.Js 数组过滤器语法 的相关文章