Jquery Knockout:ko.computed()vs经典函数?

我有一个视图模型

function ViewModel() { this.applications = ko.observable(10); this.applicationsText_computed = ko.computed(function () { return "You have " + this.applications() + " applications"; }); this.applicationsText_classinc = function () { return "You have " + this.applications() + " applications"; }; }; var viewModel = new ViewModel(); ko.applyBindings(viewModel); 

当我更改applications可观察时,两个段落都会更改文本。

那么,使用ko.computed和classinc函数有什么区别?

经典函数在其依赖的可观察量发生变化时不会被执行,但只有当它被独占调用时,另一方面,只要它可能使用的任何可观察属性发生变化,计算函数就会被执行。

您查看绑定上的当前has()和执行调用。 这使得该物业成为现成的。 当你指定计算机时,要发生两种方式绑定,你应该写:

 text: applicationsText_computed 

如果你有firstName的observable和lastName的另一个observ,你想显示全名怎么办? 这就是计算的可观察量进入的地方 – 这些是依赖于一个或多个其他可观察对象的函数,并且只要这些依赖性中的任何一个发生变化,它们就会自动更新。

是的,当applications更改时,两个段落都会更改 这是由于隐式计算的observable,它是由knockout创建的。 它类似于在你的html标记中写:


在所有三种情况下,knockout创建计算的observable并跟踪它依赖于可观察的applications 。 因此,“计算”和“经典函数”都会导致隐式计算可观察。 正如XGreen所指出的那样,使用computed的正确方法是text: applicationsText_computed

所以在这个简单的例子中你可以使用“经典function”。 对我来说,如果它是唯一的地方,在html标记中编写它会更简单。 但有两点重要。 首先,正如我所说,无论如何计算的observable是明确地或隐含地创建的。 第二个是计算的observable具有更多function。 例如,您可以在代码中明确订阅它: applicationsText_computed.subscribe(function(newValue) {...})
此外,您可以使用显式读写访问器创建observable。 检查文档以了解其他内容。 因此,计算的observable与函数完全不同。