似乎我可以用两种方式在我的视图模型上编写一个具有相同结果的函数。
普通的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更改时,将触发该功能。所以我的问题是这两种方法有什么区别?
答案 0 :(得分:4)
我假设这些行有数据绑定:
<span data-bind="text: Texts()"></span>
底线:
在两种情况下 text
绑定都会在初始渲染时对selectedFormat
创建依赖关系。
<强>详细信息:强>
您的两种情况都会更新span
,因为:
功能案例。 text
绑定会在初始渲染时注意到selectedFormat
observable存在依赖关系,因为它在函数中被调用。如果observable发生了变化,它将在KO的寄存器中找到依赖关系并触发text
绑定的更新。依赖性如下所示:
text binding --> depends-indirectly-on --> selectedFormat
请参阅this fiddle。
计算机案例。第二种情况可能相同,但稍微更明显,因为Texts
现在依赖于(计算的)可观察对象,它作为selectedFormat
可观察对象的中介。依赖现在是:
text binding --> depends-on --> Texts computed --> depends-on --> selectedFormat
请参阅this fiddle。