jQuery的颜色选择器装订处理器创建多个div(Jquery color picker bindi

2019-06-28 07:06发布

我想用这个jQuery 颜色选择器与knockout.js。 我已经写了自定义的封边处理程序绑定我的ViewModel色值ColorPicker的输入控制。

下面是绑定处理程序代码:

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

与HTML:

 <input type="text" data-bind="colorPicker: newEvent().color, colorPickerOptions: { value:newEvent().color }"/>

问题是,当我改变颜色它创建的多个div每当我改变颜色,如图图像时间。

任何人都可以请identiy在我的代码什么的问题?

Answer 1:

下面是jQuery的颜色拾取更新的代码结合处理器(与knockout.js使用libraray)。

ko.bindingHandlers.jqColorPicker = {
  init: function (element, valueAccessor, allBindingsAccessor) {

    // set default value
    var value = ko.utils.unwrapObservable(valueAccessor());
    $(element).val(value);

    //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).val());                        
    });

    //handle disposal (if KO removes by the template binding)
    ko.utils.domNodeDisposal.addDisposeCallback(element, function () {
        $(element).colorPicker("destroy");
    });

  },
  update: function (element, valueAccessor, allBindingsAccessor) {
    var value = ko.utils.unwrapObservable(valueAccessor());
    $(element).val(value);        
    $(element).change();        
  }
};


Answer 2:

在你的更新代码你有效地创建新colorpickers。

当颜色的变化,更新函数被调用,还有你创建一个新的选择器。 如果你尝试'$(元素).colorPicker( “价值”,价值); “萤火虫,你会看到它不是一个二传手,但一个构造函数。



文章来源: Jquery color picker binding handler creates multiple divs