4

刚刚进入 javascript 和 knockout.js。我找到了一堆我想要完成的例子。而且我觉得我可能会忽略一个小的语法错误。我正在尝试过滤已返回的集合(this.tasks通过 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 
}; 

这不起作用。

4

3 回答 3

10

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

this.tasksFiltered = ko.computed(function() {
    return ko.utils.arrayFilter(this.tasks(), function(Task) {
        return Task.done() === true;
    });
});
于 2013-11-13T06:06:27.860 回答
1

第二种解决方案是 ko.utils.stringStartsWith 方法有问题。

发布文件中缺少 ko.utils.stringStartsWith。

您可以使用以下代码:

  var stringStartsWith = function (string, startsWith) {          
        string = string || "";
        if (startsWith.length > string.length)
            return false;
        return string.substring(0, startsWith.length) === startsWith;
    };

查看问题链接

于 2014-07-14T05:20:22.400 回答
0

它可能会帮助你

if (myList().length > 0) {
    var text= this.filter().toLowerCase();
    return ko.utils.arrayFilter(myList(), function (item) {
                if (item.Label.toLowerCase().indexOf(text) > -1 || item.Desc.toLowerCase().indexOf(text) > -1) {
                    return true;
                 }
                 else {
                     return false;
                 }
          });
}
于 2014-09-05T13:09:34.800 回答