Knockout.js 敲除js自定义绑定的Init和update函数有什么区别

Knockout.js 敲除js自定义绑定的Init和update函数有什么区别,knockout.js,Knockout.js,我想知道knockout js定制绑定的Init和update函数有什么区别 我们什么时候应该在init函数中编写代码,什么时候应该使用knockout js定制绑定的update函数 我浏览了knockout js文档,但我对knockout js定制绑定的理解仍然不是很清楚 我只是想知道是否有人能帮助我理解我们何时使用init以及何时使用示例进行更新 这里我要指出一些不太清楚的代码和它们的意图 Init函数的代码 起初的 起初的 ko.bindingHandlers.allowBindin

我想知道knockout js定制绑定的Init和update函数有什么区别

我们什么时候应该在init函数中编写代码,什么时候应该使用knockout js定制绑定的update函数

我浏览了knockout js文档,但我对knockout js定制绑定的理解仍然不是很清楚

我只是想知道是否有人能帮助我理解我们何时使用init以及何时使用示例进行更新

这里我要指出一些不太清楚的代码和它们的意图

Init函数的代码

起初的
起初的
ko.bindingHandlers.allowBindings={
init:函数(元素、值访问器){
//仅当“我的值”为false时,才让绑定正常进行
var shouldAllowBindings=ko.unwrap(valueAccessor());
返回{ControlsDescentBindings:!shouldAllowBindings};
}
}; 
更新函数的代码

ko.bindingHandlers.customBinding={
更新:函数(元素、valueAccessor、allBindingsAccessor、viewModel、bindingContext){
var value=ko.utils.unwrapobbservable(valueAccessor());
log(JSON.stringify(value));
}
}
ko.applyBindings({
someText:ko.可观测(“初始值”)
});
明确说明这些方法的使用位置:

对于每个DOM元素,Knockout将调用您的init函数一次 您在其上使用绑定。init有两个主要用途:

  • 为DOM元素设置任何初始状态
  • 注册任何事件处理程序,例如,当用户单击或修改DOM元素时,可以更改 关联可观测
当绑定开始时,Knockout将调用update回调 应用于元素并跟踪任何依赖项 (可观察/计算)您访问的。当这些 依赖项更改时,将再次调用更新回调


简而言之,当绑定被初始化时,
init
函数被调用一次,当值绑定中有更新时,
update
函数被调用一次。您可以在上面的链接中找到示例,我认为不值得在这里复制它们。

Init仅在绑定第一次绑定时触发一次。更新最初触发一次,之后每次可观察值更改时触发一次(如果您将可观察值绑定到它,否则它将永远不会更新)。因此,在第一个代码块中,Knockout需要知道的唯一一件事是是否应该允许子代绑定。因为绑定只应用一次,所以使用init函数。在第二个示例中,我们希望记录每次更改时的值(这里是someText的值),因此应该使用更新绑定。u说“Knockout将为每个DOM元素调用init函数一次”,请参见我的第一个示例,其中自定义绑定名为allowBindings。有两个div使用了allowBindings…..这是否意味着将为两个div调用两次init?这一行
返回{ControlsDescentBindings:!shouldAllowBindings}的含义是什么?什么是ControlsDescentBindings…它是任何内置函数或关键字吗?请阅读敲除文档中有关创建自定义绑定的所有4篇文章,它应该可以回答您的大多数问题。具体地说,@dotnetom中描述了
controlsDescendantBindings
。他没有阅读文档,只是问了1100个有关stackoverflow的问题
<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")
});