knockoutjs中方法的区别

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)

RP *_*yer 6

一些东西:

  • getFullName1没有绑定到您的viewModel,因此根据它的调用位置,值this可能不是您的viewModel.这在Knockout中尤其重要,在Knockout中,您的代码被间接调用,并且传递对函数的引用.这可能不会影响您,但在处理集合/模板时尤其起作用.

  • 绑定是使用dependentObservables实现的,因此在使用它时,它们都会在firstName或lastName更改时更新其跨度.

  • 因为,getFullName2是依赖的可注册的,它会在其依赖关系中的任何一个更改时自行更新.它是否与任何东西绑定无关紧要.它还有其他功能,比如为它创建手动订阅.

  • 您也可以test: getFullName2使用dependentObservable,因为它将被解包.

  • 但最重要的原因是dependentObservable只在它们的依赖关系改变并且它们的实际值缓存在其中时才更新.所以,如果我打了getFullName1100次电话,它就会完成100次.如果我调用了getFullName2100次,它只会返回它在创建时或依赖项最后更改时计算的最新值.