var viewModel={
isChecked:ko.observable(false);
showMessage:ko.observable();
};
ko.bindingHandlers.doSomeing=function(){
update:function(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext){
if(viewModel.isChecked){
}
}
};
<pre>
<input type="checkbox" data-bind="checked:isChecked"></input>
<input type="text" data-bind="doSomeing:showMessage"></input>
</pre>
单击该复选框将触发自定义binging doSomeing中的更新方法,为什么?
但删除if(viewModel.isChecked)范围,不会触发更新方法。
答案 0 :(得分:0)
KO绑定中的update
方法在计算的observable中执行。因此,任何可以访问其值的可观察对象(例如viewModel.isChecked()
,只执行viewModel.isChecked
将无法访问该值,因此您的问题中可能会出现拼写错误),将成为依赖关系并导致绑定的更新功能再次运行。
只需注意:元素上的所有绑定实际上都是在单个计算中运行的,因此每当任何依赖项更改时,该元素上的所有绑定都将再次运行其更新函数。每次都会跟踪这些依赖关系,因此它们可以随时间变化。在Knockout 3.0中,绑定将在单个元素上彼此独立地运行。