选中了具有复选框选项的knockout.js绑定时,将触发自定义绑定中的更新方法

时间:2013-05-18 16:38:53

标签: knockout.js

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)范围,不会触发更新方法。

1 个答案:

答案 0 :(得分:0)

KO绑定中的update方法在计算的observable中执行。因此,任何可以访问其值的可观察对象(例如viewModel.isChecked(),只执行viewModel.isChecked将无法访问该值,因此您的问题中可能会出现拼写错误),将成为依赖关系并导致绑定的更新功能再次运行。

只需注意:元素上的所有绑定实际上都是在单个计算中运行的,因此每当任何依赖项更改时,该元素上的所有绑定都将再次运行其更新函数。每次都会跟踪这些依赖关系,因此它们可以随时间变化。在Knockout 3.0中,绑定将在单个元素上彼此独立地运行。