I am trying to use this jquery color picker with knockout.js. I have written custom banding handler to bind colorpicker input control with my viewModel color value.
Here is the Binding Handler code:
ko.bindingHandlers.colorPicker = {
init: function (element, valueAccessor, allBindingsAccessor) {
//initialize datepicker with some optional options
var options = allBindingsAccessor().colorPickerOptions || {};
$(element).colorPicker(options);
//handle the field changing
ko.utils.registerEventHandler(element, "change", function () {
var observable = valueAccessor();
observable($(element).colorPicker("value"));
});
//handle disposal (if KO removes by the template binding)
ko.utils.domNodeDisposal.addDisposeCallback(element, function () {
$(element).colorPicker("destroy");
});
},
update: function (element, valueAccessor) {
var value = ko.utils.unwrapObservable(valueAccessor());
$(element).colorPicker("value", value);
}
and HTML :
<input type="text" data-bind="colorPicker: newEvent().color, colorPickerOptions: { value:newEvent().color }"/>
Problem is that when I change the color it creates the multiple divs each time when I change the color as shown in image.
Can anyone please identiy whats the problem in my code??
Here is the updated code for jQuery ColorPicker binding handler (to used with knockout.js libraray).
In your update code you're effectively creating new colorpickers.
When the color changes, the update function is called and there you create a new picker. If you try '$(element).colorPicker("value", value);' in firebug, you will see it's not a setter, but a constructor.