简体   繁体   English

Knockout禁用绑定不适用于jquery ui按钮

[英]Knockout disable binding is not working with jquery ui button

I am using knockout disable binding on jquery ui button. 我在jquery ui按钮上使用knockout disable binding。 When i used data-bind='disable: ture' on any button on which jquery ui button plugin is applied, it disable that button but its appearance is not set as disabled. 当我在任何应用jquery ui按钮插件的按钮上使用data-bind='disable: ture'时,它会禁用该按钮,但其外观未设置为禁用。 Here i have created an example fiddle: 在这里,我创建了一个示例小提琴:

http://jsbin.com/arotuh/2/edit http://jsbin.com/arotuh/2/edit

What i am missing ? 我错过了什么?

As mentioned by spullen, here is how I would do using custom bindings: 正如spullen所提到的,这是我如何使用自定义绑定:

ko.bindingHandlers.jqButton = {
    init: function (element, valueAccessor, allBindingsAccessor) {
        var options = valueAccessor();
        for (var p in options) {
            options[p] = ko.utils.unwrapObservable(options[p]);
        }
        $(element).button(options);
        ko.utils.domNodeDisposal.addDisposeCallback(element, function () {
            $(element).button("destroy");
        });
    },
    update: function (element, valueAccessor) {
        var options = valueAccessor();
        for (var p in options) {
            options[p] = ko.utils.unwrapObservable(options[p]);
        }
        $(element).button("option", options);
        $(element).button("refresh");
    }
};
ko.applyBindings({
    flag: ko.observable(true)
});

And in the HTML: 在HTML中:

<button  data-bind="jqButton: {disabled: flag} ">Disable state using knockout disable binding</button>

Looks like when you use the jqueryui button it overrides the default behavior of the attributes (as in it takes control of them, not sure how though, probably would need to look into it further). 看起来当你使用jqueryui按钮时它会覆盖属性的默认行为(因为它控制了它们,不知道如何,可能需要进一步研究它)。

However, I was able to get it to work changing the order: 但是,我能够让它改变顺序:

ko.applyBindings();

$("button").eq(0).button();

$("button").eq(1).button({ disabled: true });

To get the two libraries to play nicely you could also write custom bindings . 为了让两个库很好地玩,你也可以编写自定义绑定

I'd like to elaborate on gbs's example (which works pretty good) by adding support for using observables for the jquery ui button's options (like eg disabled being mapped to an observable rather than just true or false). 我想通过添加对jquery ui按钮的选项使用observables的支持来详细说明gbs的例子(它工作得很好)(例如禁用被映射到observable而不是true或false)。

ko.bindingHandlers.jqButton = {
init: function (element, valueAccessor, allBindingsAccessor) {
    var options = valueAccessor();
    for (var p in options) {
        // CHANGE STARTS HERE
        if (ko.isObservable(options[p]))
            options[p].subscribe(function (newValue) {
                $(element).button("option", p, newValue);
                $(element).button("refresh");
            });
        // CHANGE ENDS HERE
        options[p] = ko.utils.unwrapObservable(options[p]);
    }
    $(element).button(options);
    ko.utils.domNodeDisposal.addDisposeCallback(element, function () {
        $(element).button("destroy");   
    });
},
update: function (element, valueAccessor) {
    var options = valueAccessor();
    for (var p in options) {
        options[p] = ko.utils.unwrapObservable(options[p]);
    }
    $(element).button("option", options);
    $(element).button("refresh");
}

}; };

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM