我确信这可能是一个基本问题,但我有以下 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 中收到以下错误:
类型错误:self.Id 不是函数
我不确定为什么计算属性会导致此错误?
最佳答案
默认情况下,当您创建 ko.compulated
时,它会立即被评估。
所以在你的情况下 function () { return self.id() !== "0"; }
在调用 addData
方法之前运行,因此您的 id 属性将丢失并且您会收到异常。
要解决此问题,您需要使用 deferEvaluation
option 告诉 KO 推迟评估:
self.isUpdate = ko.computed(
function () { return self.id() !== "0"; },
self, { deferEvaluation: true });
关于javascript - 从计算属性访问 Knockout Observable 属性会出现 TypeError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28277563/