Knockout.js 敲除js自定义绑定的Init和update函数有什么区别
我想知道knockout js定制绑定的Init和update函数有什么区别 我们什么时候应该在init函数中编写代码,什么时候应该使用knockout js定制绑定的update函数 我浏览了knockout js文档,但我对knockout js定制绑定的理解仍然不是很清楚 我只是想知道是否有人能帮助我理解我们何时使用init以及何时使用示例进行更新 这里我要指出一些不太清楚的代码和它们的意图 Init函数的代码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
起初的
起初的
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元素时,可以更改 关联可观测
简而言之,当绑定被初始化时,
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")
});