使用prettycheckable在第一次加载时敲除绑定

时间:2013-07-30 16:49:47

标签: knockout.js

我正在努力让漂亮的检查和淘汰赛一起工作,我已经看到最近已经解决了但是老实说当我在第一次加载时设置复选框(或单选按钮)的属性时我无法使其工作

所以我只是想写一个简单的自定义绑定,但它失败了。如果isChecked在第一次加载时被设置为true或者为false,则它会错过第一次更改,然后它“抓住”它,但显然只有一次偏离实际值。

ko.bindingHandlers.prettyChecked = {
    update: function (element, valueAccessor) {
                    ko.bindingHandlers.checked.init(element, valueAccessor);
        $(element).prettyCheckable();

        var value = ko.utils.unwrapObservable(valueAccessor());
        if (value) {
            $(element).next("a").addClass('checked');
        } else {
            $(element).next("a").removeClass('checked');
        }
    }
};

$(function () {
    $('input:checkbox').prettyCheckable();

    var vm = {
        isChecked: ko.observable(false)
    };

    ko.applyBindings(vm);
});

小提琴here

1 个答案:

答案 0 :(得分:0)

我修改了你的小提琴,现在它起作用了:

ko.bindingHandlers.prettyChecked = {
    init: function (element, valueAccessor) {

        ko.bindingHandlers.checked.init(element, valueAccessor);
        var value = ko.utils.unwrapObservable(valueAccessor());

        $(element).prettyCheckable();
        if(value)
            $(element).next('a').click();                
    },
    update: function(element, valueAccessor) {
        var value = ko.utils.unwrapObservable(valueAccessor());
        $(element).next("input").val(value);
    }
};

还有完整的css solution

See fiddle