按钮上的Knockout自定义绑定

时间:2013-01-04 20:20:46

标签: knockout.js ko-custom-binding

我在创建自定义绑定时遇到了一些问题。根据我的理解,每次视图模型更改时都应触发绑定的更新回调。

我创建了一个小例子。

http://jsfiddle.net/alexmaie/pbEmS/

  ko.bindingHandlers.testBinding = {

     update: function(element, valueAccessor, allBindingsAccessor, viewModel,       bindingContext) {
//just for testing purposes
     alert("update");
  }
};

$(document).ready(function() {
function AppViewModel() {
    var self = this;
    self.firstName = ko.observable("Bert");

}
ko.applyBindings(new AppViewModel());
});​

我将按钮附加到按钮上。即使我更改了observable的数据,绑定的更新也会执行一次,然后再也不会再次执行。

我想使用这种方法来实现canExecute绑定。

1 个答案:

答案 0 :(得分:1)

绑定是在computed observable内实现的,因此它们会根据实际访问的observable / computed来跟踪依赖关系。

因此,这意味着在update函数中,您需要访问传递给它的observable的值,如:

   ko.bindingHandlers.testBinding = {   
      update: function(element, valueAccessor) {
         //dependency is created here
         var value = ko.utils.unwrapObservable(valueAccessor());
         alert("update " + value);
      }
   }

更新了小提琴:http://jsfiddle.net/rniemeyer/pbEmS/2/