KO Custom Binding Example.txt.txt
ko.bindingHandlers.toggle = {
    init: function (element, valueAccessor) {
        var value = valueAccessor();
        ko.applyBindingsToNode(element, {
            click: function () {
                value(!value());
            }
        });
    }
};

ko.bindingHandlers.currency = {
    symbol: ko.observable('$'),
    update: function (element, valueAccessor, allBindingsAccessor) {
        return ko.bindingHandlers.text.update(element, function () {
            var value = +(ko.unwrap(valueAccessor()) || 0), symbol = ko.unwrap(allBindingsAccessor().symbol !== undefined ? allBindingsAccessor().symbol : ko.bindingHandlers.currency.symbol);
            return symbol + value.toFixed(2).replace(/(\d)(?=(\d{3})+\.)/g, "$1,");
        });
    }
};

ko.bindingHandlers.toJSON = {
    update: function (element, valueAccessor) {
        return ko.bindingHandlers.text.update(element, function () {
            return ko.toJSON(valueAccessor(), null, 2);
        });
    }
};

ko.bindingHandlers.hidden = {
    update: function (element, valueAccessor) {
        var value = !ko.unwrap(valueAccessor());
        ko.bindingHandlers.visible.update(element, function () {
            return value;
        });
    }
};

ko.bindingHandlers.icheck = {
    init: function (element, valueAccessor, allBindingsAccessor) {
        var checkedBinding = allBindingsAccessor().checked;
        $(element).iCheck({
            checkboxClass: 'icheckbox_minimal-blue',
            increaseArea: '10%'
        });
        $(element).on('ifChanged', function (event) {
            checkedBinding(event.target.checked);
        });
    },
    update: function (element, valueAccessor, allBindingsAccessor) {
        var checkedBinding = allBindingsAccessor().checked;
        var status = checked ? 'check' : 'uncheck';
        $(element).iCheck(status);
    }
};