javascript - 从计算属性访问 Knockout Observable 属性会出现 TypeError

标签 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(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/

相关文章:

javascript - 我如何阅读这个功能?

knockout.js - 如何使用 knockout 绑定(bind)访问文件输入?

javascript - Dust.js 在渲染时覆盖 Knockout 可观察值

javascript - 如何使用ko.observableArray?

arrays - knockout 购物车编辑器示例问题 : extending cascading drop-downs with nested arrays and functions

php - 尝试使用 JS 和 PHP 下载 "Hello world"

javascript - 为什么这不画轨道而只画椭圆?

javascript - 使打开的花式框模态

javascript - Knockoutjs单选按钮无法选择默认选中

javascript - 声明 javascript 变量