knockout js自定义绑定的Init和update功能有什么区别

时间:2015-06-23 09:01:44

标签: knockout.js

我想知道knockout js自定义绑定的Init和更新功能有什么区别?

什么时候我们应该在init函数中编写代码,什么时候应该去敲除js自定义绑定的更新函数。

我通过淘汰赛js doc,但我对淘汰js自定义绑定的理解对我来说还不是很清楚。

我只是想知道是否有人帮助我了解我们何时进行初始化以及何时通过示例进行更新。

在这里,我要指出一些不太清楚的代码和意图。

Init函数的代码

<div data-bind="allowBindings: true">
    <!-- This will display Replacement, because bindings are applied -->
    <div data-bind="text: 'Replacement'">Original</div>
</div>

<div data-bind="allowBindings: false">
    <!-- This will display Original, because bindings are not applied -->
    <div data-bind="text: 'Replacement'">Original</div>
</div>

ko.bindingHandlers.allowBindings = {
    init: function(elem, valueAccessor) {
        // Let bindings proceed as normal *only if* my value is false
        var shouldAllowBindings = ko.unwrap(valueAccessor());
        return { controlsDescendantBindings: !shouldAllowBindings };
    }
}; 

更新代码功能

<input type="text" data-bind="value: someText, customBinding: someText">

ko.bindingHandlers.customBinding = {
    update: function(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
        var value = ko.utils.unwrapObservable(valueAccessor());
       console.log( JSON.stringify(value) );       
    }
}

ko.applyBindings({
    someText: ko.observable("inital value")
});

1 个答案:

答案 0 :(得分:1)

Knockout documentation清楚地说明了这些方法的使用位置:

  

Knockout将为每个DOM元素调用一次 init 函数   你使用绑定。 init有两个主要用途:

     
      
  • 设置DOM元素的任何初始状态
  •   
  • 要注册任何事件处理程序,以便,例如,当用户单击或修改DOM元素时,您可以更改状态   相关的可观察的
  •   
     

Knockout最初会在绑定时调用更新回调   应用于元素并跟踪任何依赖项   您可以访问的(observables / computeds)。当这些中的任何一个   依赖关系发生变化,将再次调用更新回调。

简短回答是在初始化绑定时调用init函数,并且每次在值绑定中有更新时调用update函数。您可以在上面的链接中找到示例,我不认为值得在此处复制它们。