启用单击绑定的条件

Kyl*_*yle 7 knockout.js

有没有办法为点击绑定指定启用条件?例如,如果我有以下内容:

<div data-bind="click: toggleDialog">Click Me</div>
Run Code Online (Sandbox Code Playgroud)

如果发生指定的条件,我希望能够禁用单击,这样可以产生以下效果:

<div data-bind="click: toggleDialog, enableClick: myName() === 'John'">Click Me</div>
Run Code Online (Sandbox Code Playgroud)

我想也许自定义绑定可能适用于此,但不完全确定如何去做.

And*_*ers 12

You can use this approach that I did for anchors

http://jsfiddle.net/xCfQC/11/

(function() {
    //First make KO able to disable clicks on Anchors
    var orgClickInit = ko.bindingHandlers.click.init;
    ko.bindingHandlers.click.init = function(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
      if(element.tagName === "DIV" && allBindingsAccessor().enable != null) {
          var disabled = ko.computed({
              read: function() {
                  return ko.utils.unwrapObservable(allBindingsAccessor().enable) === false;                                     
              }, 
              disposeWhenNodeIsRemoved: element
          });
          ko.applyBindingsToNode(element, { css: { disabled: disabled}  });
          var handler = valueAccessor(); 
          valueAccessor = function() {
              return function() {
                  if(ko.utils.unwrapObservable(allBindingsAccessor().enable)) { 
                      handler.apply(this, arguments);   
                  }
              }
          };         
      } 
      orgClickInit.apply(this, arguments);
    };
})();
Run Code Online (Sandbox Code Playgroud)

More details: https://github.com/AndersMalmgren/Knockout.BindingConventions/wiki/Button-convention