Skip to content

Instantly share code, notes, and snippets.

@hidegh
Created April 4, 2017 09:02
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hidegh/f8045b014331f177956a593f7c3d5a57 to your computer and use it in GitHub Desktop.
Save hidegh/f8045b014331f177956a593f7c3d5a57 to your computer and use it in GitHub Desktop.
$(function () {
// on document ready...
if (typeof ko != "undefined" && typeof kendo != "undefined") {
// Extending original KO handlers to support kendo widgets...since knockout-kendo.js does not worked well in my tests...
var originalHandlerForValueUpdate = ko.bindingHandlers.value.update;
var originalHandlerForDisableUpdate = ko.bindingHandlers.disable.update;
var originalHandlerForEnableUpdate = ko.bindingHandlers.enable.update;
var originalHandlerForReadonlyUpdate = ko.bindingHandlers.readonly.update;
ko.bindingHandlers.value.update = function (element, valueAccessor, allBindingsAccessor, viewModel, context) {
var $element = $(element);
var value = ko.utils.unwrapObservable(valueAccessor());
var widget = kendo.widgetInstance($element);
if (widget != "undefined") {
// Check if widget has given method, execute it...
if (widget && widget["value"] !== undefined) {
widget["value"](value);
return;
}
}
// If binding wasn't processed via kendo widget, use original knockout handler
originalHandlerForValueUpdate(element, valueAccessor, allBindingsAccessor, viewModel, context);
};
ko.bindingHandlers.disable.update = function (element, valueAccessor, allBindingsAccessor, viewModel, context) {
var $element = $(element);
var value = ko.utils.unwrapObservable(valueAccessor());
var widget = kendo.widgetInstance($element);
if (widget != "undefined") {
// Check if widget has given method, execute it...
if (widget && widget["enable"] !== undefined) {
widget["enable"](!value);
return;
}
}
/*
if ($element.hasClass('k-textbox')) {
if (value) $element.addClass("k-state-disabled");
else $element.removeClass("k-state-disabled");
}
*/
// If binding wasn't processed via kendo widget, use original knockout handler
originalHandlerForDisableUpdate(element, valueAccessor, allBindingsAccessor, viewModel, context);
};
ko.bindingHandlers.enable.update = function (element, valueAccessor, allBindingsAccessor, viewModel, context) {
var $element = $(element);
var value = ko.utils.unwrapObservable(valueAccessor());
var widget = kendo.widgetInstance($element);
if (widget != "undefined") {
// Check if widget has given method, execute it...
if (widget && widget["enable"] !== undefined) {
widget["enable"](value);
return;
}
}
/*
if ($element.hasClass('k-textbox')) {
if (value) $element.removeClass("k-state-disabled");
else $element.addClass("k-state-disabled");
}
*/
// If binding wasn't processed via kendo widget, use original knockout handler
originalHandlerForEnableUpdate(element, valueAccessor, allBindingsAccessor, viewModel, context);
};
// We override it only if it was defined before - since readonly binding is a custom handler, we need to do this check
if (ko.bindingHandlers.readonly !== undefined) {
ko.bindingHandlers.readonly.update = function (element, valueAccessor, allBindingsAccessor, viewModel, context) {
var $element = $(element);
var value = ko.utils.unwrapObservable(valueAccessor());
var widget = kendo.widgetInstance($element);
if (widget != "undefined") {
// Check if widget has given method, execute it...
if (widget && widget["readonly"] !== undefined) {
widget["readonly"](value);
return;
}
}
// If binding wasn't processed via kendo widget, use original knockout handler
originalHandlerForReadonlyUpdate(element, valueAccessor, allBindingsAccessor, viewModel, context);
};
};
} else {
console.log("ko or kendo is undefined, cannot apply kendo.knockout.bindings.js");
}
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment