我确定这可能是一个基本问题,但我有以下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 Mapping Plugin映射接收的数据。有关信息,此数据是通过外部JQuery AJAX调用提供的。
问题是我在Mozilla中遇到以下错误:
TypeError: self.Id is not a function
我不确定为什么计算属性会导致此错误?
答案 0 :(得分:1)
默认情况下,当您创建ko.computed
时,会立即对其进行评估。
因此,在您调用function () { return self.id() !== "0"; }
方法之前,addData
会运行,因此您的ID属性将会丢失并且您将获得异常。
要解决此问题,您需要告诉KO使用deferEvaluation
option推迟评估:
self.isUpdate = ko.computed(
function () { return self.id() !== "0"; },
self, { deferEvaluation: true });