Javascript Select2的敲除绑定覆盖现有值
我使用Select2提供的Knockout.js绑定,如下所示: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);
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相同的格式。