看来我可以用两种方式在我的视图模型上编写一个函数,结果相同.
普通的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更改时,将触发该功能.所以我的问题是这两种方法有什么区别?
我假设数据绑定是这样的:
<span data-bind="text: Texts()"></span>
Run Code Online (Sandbox Code Playgroud)
底线:
在这两种情况下,绑定text
都会创建对初始渲染的依赖selectedFormat
。
详细信息:
您的两种情况都会更新,span
因为:
功能案例。绑定text
会在初始渲染时注意到对可selectedFormat
观察对象的依赖,因为它是在您的函数中调用的。如果可观察对象发生变化,它将发现 KO 寄存器中的依赖关系并触发绑定更新text
。依赖关系如下所示:
text binding --> depends-indirectly-on --> selectedFormat
看看这个小提琴。
计算案例。第二种情况可能会以相同的方式工作,尽管它稍微更明显,因为Texts
现在依赖于(计算的)可观察量,该可观察量充当可观察量的中介selectedFormat
。现在的依赖关系是:
text binding --> depends-on --> Texts computed --> depends-on --> selectedFormat
看看这个小提琴。