javascript - ICheck 插件在 knockout js 检查绑定(bind)中不起作用

标签 javascript knockout.js icheck

HTML

<div class="col-xs-4">
    <div class="form-group">
        <label>
            <input type="radio" name="r1" 
                   data-bind="checked: EmployeeTypeChecked" 
                   value="FT" class="minimal" />
            Full Time Employee
        </label>
        <label>
            <input type="radio" name="r1" value="DE" 
                   data-bind="checked: EmployeeTypeChecked" class="minimal" />
            Daily Wages
        </label>
        <label>
            <input type="radio" name="r1" value="OD" 
                   data-bind="checked: EmployeeTypeChecked" class="minimal" />
            On demand
        </label>
    </div>
</div>

knockout 代码

window.employeeApp = {};

window.employeeApp.DataContext = {

    createEmployee: function (data) { 
        return new employeeApp.DataContext.EmployeeModel(data); 
    },

    EmployeeModel: function (data) {
        data = data || {};
        var self = this;

        self.EmployeeTypeChecked = ko.observable(false),

        self.toJs = function () {
            return ko.toJS(self);
        };

        self.toJson = function () {
            return ko.toJSON(self);
        };
    }
}

window.employeeApp.ViewModel = function () {
    var selectedEmploeyee = ko.observable(),

    init = function () {
        selectedEmploeyee(employeeApp.DataContext.createEmployee());
    };

    return {
        init: init,
        selectedEmploeyee: selectedEmploeyee,
   };
}();

ko.applyBindings(employeeApp.ViewModel, $('.page_script')[0]);

employeeApp.ViewModel.init();

如果我删除 iCheck 插件样式,它会起作用;使用 iCheck 插件它不起作用 正确。

例如引用this knockout link

最佳答案

您需要创建一个自定义绑定(bind)...以便使用 iCheck 插件..与 knockout..

ko.bindingHandlers.yourBindingName= {
    init: function (element, valueAccessor) {
        $(element).iCheck({
            checkboxClass: 'icheckbox_minimal-grey',
            increaseArea: '10%'
        });

        $(element).on('ifChanged', function () {
            var observable = valueAccessor();
            observable($(element)[0].checked);
        });
    },
    update: function (element, valueAccessor) {
        var value = ko.unwrap(valueAccessor());   
        if (value) {
            $(element).iCheck('check');            
        } else {
            $(element).iCheck('uncheck');
        }
    }
};

你可以像这样使用它..

<p>Send me spam: <input type="checkbox" data-bind="yourBindingName: wantsSpam" /></p>

而不是使用 knockout “检查”绑定(bind)

<p>Send me spam: <input type="checkbox" data-bind="checked: wantsSpam" /></p>

关于javascript - ICheck 插件在 knockout js 检查绑定(bind)中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23968328/

相关文章:

javascript - 使用 ko.mapping.fromJS 的意外行为

javascript - KnockoutJs 绑定(bind)可变数量的控件

javascript - 如何在动态创建的元素中添加Javascript事件?

css - 单击表单选中/取消选中复选框的任意位置

javascript - 如何识别正在改变样式的内容

javascript - 使用 JSON 数据填充 HTML

javascript - 如果在 attr 绑定(bind)内则 knockout

jquery - 使用 jquery 检查取消选中更改时的所有复选框

javascript - 当任何 promise 都实现时,是否有可能脱离 await Promise.all (Chrome 80)

javascript - 如何查找提交时使用了哪个按钮