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