从 Computed 属性 访问 Knockout Observable 属性 给出 TypeError

Accessing Knockout Observable Property from Computed Property Gives TypeError

我确定这可能是一个基本问题,但我有以下 ViewModel:

var viewModel = new EditorViewModel();
viewModel.addData(model);
ko.applyBindings(viewModel);

var EditorViewModel = function () {

    var self = this;
    self.addData = function (data) { .
        ko.mapping.fromJS(data, {}, self);
    };
    self.isUpdate = ko.computed(function () { return self.id() !== "0"; }, self);

};

ViewModel 通过addData 方法接收数据。然后,此方法使用 Knockout 映射插件映射接收到的数据。有关信息,此数据是通过外部 JQuery AJAX 调用提供的。

问题是我在 Mozilla 中遇到以下错误:

TypeError: self.Id is not a function

我不确定为什么计算 属性 会导致此错误?

默认情况下,当您创建 ko.computed 时,它会立即被计算。

所以在你的情况下,function () { return self.id() !== "0"; } 在你调用你的 addData 方法之前运行,所以你的 id 属性 将会丢失,你会得到异常。

要解决此问题,您需要告诉 KO 使用 deferEvaluation option:

推迟评估
 self.isUpdate = ko.computed(
     function () { return self.id() !== "0"; }, 
     self, { deferEvaluation: true });