正常javascript函数和计算机之间的区别

时间:2013-08-28 06:37:23

标签: knockout.js

似乎我可以用两种方式在我的视图模型上编写一个具有相同结果的函数。

普通的javascript函数:

vm.Texts = function () {
  var self = vm;
  if (self.selectedFormat()) {
    return self.selectedFormat().Texts();
  }
};

ko计算:

vm.Texts = ko.computed(function () {
  var self = vm;
  if (self.selectedFormat()) {
    return self.selectedFormat().Texts();
  }
});

'vm'是视图模型,selectedFormat是视图模型上的可观察对象。在这两种情况下,当selectedFormat更改时,将触发该功能。所以我的问题是这两种方法有什么区别?

1 个答案:

答案 0 :(得分:4)

我假设这些行有数据绑定:

<span data-bind="text: Texts()"></span>

底线
在两种情况下 text绑定都会在初始渲染时对selectedFormat 创建依赖关系。


<强>详细信息:
您的两种情况都会更新span,因为:

  1. 功能案例text绑定会在初始渲染时注意到selectedFormat observable存在依赖关系,因为它在函数中被调用。如果observable发生了变化,它将在KO的寄存器中找到依赖关系并触发text绑定的更新。依赖性如下所示:

    text binding --> depends-indirectly-on --> selectedFormat

    请参阅this fiddle

  2. 计算机案例。第二种情况可能相同,但稍微更明显,因为Texts现在依赖于(计算的)可观察对象,它作为selectedFormat可观察对象的中介。依赖现在是:

    text binding --> depends-on --> Texts computed --> depends-on --> selectedFormat

    请参阅this fiddle