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

4

1 回答 1

0

KO 绑定中的update方法在计算的 observable 中执行。因此,任何可以访问其值的可观察对象(例如viewModel.isChecked()在您的情况下,只是做viewModel.isChecked不会访问该值,因此您的问题中可能有错字),将成为依赖项并导致绑定的更新函数再次运行。

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

于 2013-05-18T17:11:01.217 回答