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

use*_*689 5 knockout.js

看来我可以用两种方式在我的视图模型上编写一个函数,结果相同.

普通的javascript函数:

vm.Texts = function () {
  var self = vm;
  if (self.selectedFormat()) {
    return self.selectedFormat().Texts();
  }
};
Run Code Online (Sandbox Code Playgroud)

ko计算:

vm.Texts = ko.computed(function () {
  var self = vm;
  if (self.selectedFormat()) {
    return self.selectedFormat().Texts();
  }
});
Run Code Online (Sandbox Code Playgroud)

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

Jer*_*oen 4

我假设数据绑定是这样的:

<span data-bind="text: Texts()"></span>
Run Code Online (Sandbox Code Playgroud)

底线
在这两种情况下,绑定text都会创建对初始渲染的依赖selectedFormat


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

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

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

    看看这个小提琴

  2. 计算案例。第二种情况可能会以相同的方式工作,尽管它稍微更明显,因为Texts现在依赖于(计算的)可观察量,该可观察量充当可观察量的中介selectedFormat。现在的依赖关系是:

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

    看看这个小提琴