Enable condition for click binding

前端 未结 4 1968
慢半拍i
慢半拍i 2020-12-17 00:07

Is there any way to specify an enable condition for the click binding? For example if I have the following:

Clic
4条回答
  •  粉色の甜心
    2020-12-17 00:43

    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);
        };
    })();
    

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

提交回复
热议问题