Javascript Select2的敲除绑定覆盖现有值

Javascript Select2的敲除绑定覆盖现有值,javascript,jquery,knockout.js,jquery-select2,Javascript,Jquery,Knockout.js,Jquery Select2,我使用Select2提供的Knockout.js绑定,如下所示: ko.bindingHandlers.select2 = { init: function (element, valueAccessor, allBindingsAccessor) { var obj = valueAccessor(), allBindings = allBindingsAccessor() $(element).select2(obj);

我使用Select2提供的Knockout.js绑定,如下所示:

ko.bindingHandlers.select2 = {
    init: function (element, valueAccessor, allBindingsAccessor) {
        var obj = valueAccessor(),
            allBindings = allBindingsAccessor()
        $(element).select2(obj);

        ko.utils.domNodeDisposal.addDisposeCallback(element, function () {
            $(element).select2('destroy');
        });
    },
    update: function (element, valueAccessor) {
        $(element).trigger('change');
    }
};
我还有一个隐藏元素的绑定:

<input type="hidden" class="bigdrop" id="seriesInput" data-bind="value: seriesID, select2: {minimumInputLength: 4, query: $root.nameQuery, formatResult: $root.ownerFormatResult, formatSelection: $root.ownerFormatSelection }" style="margin-left: 1px; width:340px" />

我遇到的问题是,当创建select2绑定时,它会将可观察seriesID中预先存在的值更改为字符串[object]。我相当肯定这是绑定处理程序的问题,但我在任何地方都找不到一个可用的。有人找到了解决方法吗?

请确保告诉select如何更新您的observable。因此,当select2更改值时,需要向init函数添加一个更改处理程序

我需要更多地查看您的代码,以了解出现此问题的原因,但下面是一个代码运行良好的示例:

我使用了以下viewmodel代码:

ko.applyBindings({
    seriesID: ko.observable('series-id'),
    nameQuery: function(o) {
        o.callback({
            more: false,
            results: [
                { id: "CA", text: "California" },
                { id: "AL", text: "Alabama" },
                {id: 'AA1', text: 'aaaaabc'},
                {id: 'AA2', text: 'aaaaabcd'},
                {id: 'AA', text: 'aaaaaa'},
                {id:'BB', text: 'bbbbbbb'}]
        });
    },
    ownerFormatResult: function(o) { return o.text },
    ownerFormatSelection: function(o) { return o.text }
});

我想,因为它是以带有字段id和名称的对象的形式返回值,所以它希望传入一个类似的对象。事实证明,它只需要id,所以我只是手动将下拉列表的显示值设置为与formatSelection相同的格式。