如何在knockout.JS中使用colorpicker设置'style:color'

时间:2015-02-10 14:02:56

标签: javascript jquery css knockout.js

我想用颜色选择器设置文本的颜色。找到了一个很好的小敲击装订器,但无法使其正常工作。

HTML:

<div class="myPicker" data-bind="jqColorPicker: coverTextColor, colorPickerOptions: { value: coverTextColor}"></div>
<span class="title" data-bind="text: title, style: { color: coverTextColor}">blahblah</span>

Bindingshandler&amp;视图模型:

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


viewModel = function(){
    var self = this;
    self.coverTextColor = ko.observable('green');
    self.title = ko.observable('Hi there!');
};

ko.applyBindings( new viewModel() );

任何帮助表示感谢。

在这里小提琴:http://jsfiddle.net/AsleG/hmLbb9c0/2/

1 个答案:

答案 0 :(得分:2)

div既没有change事件,也不能使用jQuery .val()方法读取其内容。

您应该使用输入字段的文档states,并且仅在代码有效的情况下进行了更改。

http://jsfiddle.net/48evdyvx/1/