有没有办法为点击绑定指定启用条件?例如,如果我有以下内容:
<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
(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