sat*_*els 1 javascript knockout.js
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);
Run Code Online (Sandbox Code Playgroud)
模板
<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>
Run Code Online (Sandbox Code Playgroud)
一些东西:
getFullName1没有绑定到您的viewModel,因此根据它的调用位置,值this可能不是您的viewModel.这在Knockout中尤其重要,在Knockout中,您的代码被间接调用,并且传递对函数的引用.这可能不会影响您,但在处理集合/模板时尤其起作用.
绑定是使用dependentObservables实现的,因此在使用它时,它们都会在firstName或lastName更改时更新其跨度.
因为,getFullName2是依赖的可注册的,它会在其依赖关系中的任何一个更改时自行更新.它是否与任何东西绑定无关紧要.它还有其他功能,比如为它创建手动订阅.
您也可以test: getFullName2使用dependentObservable,因为它将被解包.
但最重要的原因是dependentObservable只在它们的依赖关系改变并且它们的实际值缓存在其中时才更新.所以,如果我打了getFullName1100次电话,它就会完成100次.如果我调用了getFullName2100次,它只会返回它在创建时或依赖项最后更改时计算的最新值.
| 归档时间: |
|
| 查看次数: |
233 次 |
| 最近记录: |