0

disable在 jquery ui 按钮上使用淘汰赛绑定。当我在应用data-bind='disable: ture'了 jquery ui 按钮插件的任何按钮上使用时,它会禁用该按钮,但其外观未设置为禁用。在这里,我创建了一个示例小提琴:

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

我错过了什么?

4

3 回答 3

2

正如 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)
});

在 HTML 中:

<button  data-bind="jqButton: {disabled: flag} ">Disable state using knockout disable binding</button>
于 2013-03-30T10:04:01.267 回答
0

看起来当您使用 jqueryui 按钮时,它会覆盖属性的默认行为(因为它可以控制它们,但不确定如何,可能需要进一步研究)。

但是,我能够让它改变顺序:

ko.applyBindings();

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

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

为了让这两个库很好地发挥作用,您还可以编写自定义绑定

于 2013-03-29T17:40:24.080 回答
0

我想通过为 jquery ui 按钮的选项添加对使用 observables 的支持来详细说明 gbs 的示例(效果很好)(例如,禁用映射到可观察对象,而不仅仅是 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");
}

};

于 2013-09-04T09:37:15.730 回答