我正在使用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 Object]”。我很确定这是绑定处理程序的一个问题,但我无法在任何地方找到工作的问题。有人找到了解决方法吗?
答案 0 :(得分:0)
我需要查看更多代码才能知道您遇到此问题的原因,但这里有一个示例,您的代码可以正常运行:http://jsfiddle.net/Y93Wm/
我使用了这个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 }
});
答案 1 :(得分:-1)
确保告诉select如何更新您的observable。因此,当select2更改值时,您需要向init函数添加更改处理程序。