我确信这可能是一个基本问题,但我有以下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
我不知道为什么计算属性会导致这个错误?
发布于 2015-02-02 12:27:44
默认情况下,当您创建ko.computed时,会立即对其进行评估。
因此,在您的示例中,function () { return self.id() !== "0"; }在调用addData方法之前运行,因此您的id属性将丢失并得到异常。
要解决这个问题,您需要告诉KO推迟使用 option进行评估
self.isUpdate = ko.computed(
function () { return self.id() !== "0"; },
self, { deferEvaluation: true });https://stackoverflow.com/questions/28277563
复制相似问题