Javascript 从Computed属性访问Knockout Observable属性会产生TypeError

Javascript 从Computed属性访问Knockout Observable属性会产生TypeError,javascript,knockout.js,Javascript,Knockout.js,我确信这可能是一个基本问题,但我有以下ViewModel: var viewModel = new EditorViewModel(); viewModel.addData(model); ko.applyBindings(viewModel); var EditorViewModel = function () { var self = this; self.addData = function (data) { . ko.mapping.fromJS(da

我确信这可能是一个基本问题,但我有以下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不是函数


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

默认情况下,当您创建
ko.computed
时,会立即对其进行计算

因此,在您的例子中,
函数(){return self.id()!==“0”}
在您调用
addData
方法之前运行,因此您的id属性将丢失,您将获得异常

要解决此问题,您需要告诉KO推迟评估:


谢谢-我错误地假设
ko.computed
在调用
ko.applyBindings
之前不会进行计算。
 self.isUpdate = ko.computed(
     function () { return self.id() !== "0"; }, 
     self, { deferEvaluation: true });