getFullName1和getFullName2之间的区别是什么?
视图模型:
var viewModel = {
firstName: ko.observable("Vasya"),
lastName: ko.observable("Petrov"),
getFullName1: function() {
return this.firstName() + " " + this.lastName();
}
};
viewModel.getFullName2 = ko.dependentObservable(function() {
return this.firstName() + " " + this.lastName();
}, viewModel);
// Activates knockout.js
ko.applyBindings(viewModel);
模板
<p>Full name 1: <span data-bind="text: getFullName1()">todo</span></p>
<p>Full name 2: <span data-bind="text: getFullName2()">todo</span></p>
<p>First name: <input data-bind="value: firstName"></p>
答案 0 :(得分:6)
一些事情:
getFullName1
未绑定到您的viewModel,因此根据其调用位置,this
的值可能不是您的viewModel。这在Knockout中尤其重要,在Knockout中,您的代码被间接调用,并且传递对函数的引用。这可能不会影响您,但在处理集合/模板时尤其起作用。
绑定是使用dependentObservables实现的,因此在使用它时,当firstName或lastName发生更改时,它们都会更新它们的跨度。
因为getFullName2
是dependentObservable,所以当它的一个依赖项发生变化时,它会自动更新。它是否与任何东西绑定无关紧要。它还有其他功能,例如创建针对它的手动订阅。
您也可以使用dependentObservable说test: getFullName2
,因为它会被解包。
但最重要的原因是dependentObservable只在其依赖项发生变化且其实际值缓存在其中时才会更新。所以,如果我拨打getFullName1
100次,那么它将完成所有100次的工作。如果我调用了getFullName2
100次,它只会返回它在创建时或依赖项上次更改时计算的最新值。