【问题标题】:KnockoutJs computed array not calculated correctlyKnockoutJs 计算数组未正确计算
【发布时间】:2012-10-15 06:51:43
【问题描述】:

代码如下:EmployeeModel是viewModel,问题是当我改变一个item的属性——employees(obs数组)中的deletedFlag,deletedItems没有更新。

我该如何解决这个问题?

  function Employee(data) {
    this.employeid = ko.observable(data.employeid);
    this.name = ko.observable(data.name);
    this.isactive = ko.observable(data.isactive);
    this.deletedFlag = ko.observable(false);
}

var EmployeeModel = function () {
    var self = this;
    self.employees = ko.observableArray([]);

    self.deletedItems = ko.computed(function () {
        return ko.utils.arrayFilter(self.employees(), function (item) {
            return item.deletedFlag == true;
        });
    }, this);
}

编辑:以下代码将数组中的一项标记为删除

self.removeEmployee = function (employee) {
        employee.deletedFlag(true);
    };

【问题讨论】:

  • 希望你在最后应用了 ko 绑定ko.applyBindings(new EmployeeModel());
  • 也发布一些 HTML 来玩弄它

标签: javascript mvvm knockout.js


【解决方案1】:

deletedFlag 属性是可观察的,因此您需要通过将其作为函数调用来检索其当前值(您不能直接将其与任何值进行比较):

self.deletedItems = ko.computed(function () {
    return ko.utils.arrayFilter(self.employees(), function (item) {
        return item.deletedFlag() == true; // <===
    });
}, this);

【讨论】:

  • 是的,你在几分钟内击败了我 :) 非常感谢!
猜你喜欢
  • 1970-01-01
  • 2015-07-30
  • 2012-10-11
  • 2018-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-24
  • 2014-07-03
相关资源
最近更新 更多