【发布时间】:2023-03-03 10:06:01
【问题描述】:
我将 Select2 与 knockout.js 一起使用。
但是控件没有正确显示初始值。看来选择功能没有提出
我修改了一个现有的 jsbin 来演示我的问题。
http://jsbin.com/xufovura/6/edit
绑定:
<div data-bind="value: selectedState, select2: { data: states, placeholder: 'Select a State', formatResult: format ,initSelection: initSelect}" class="select2" style="width: 200px"></div>
自定义绑定的一部分(jsbin中的完整代码):
ko.bindingHandlers.select2 = {
init: function(el, valueAccessor, allBindingsAccessor, viewModel) {
ko.utils.domNodeDisposal.addDisposeCallback(el, function() {
$(el).select2('destroy');
});
var allBindings = allBindingsAccessor(),
select2 = ko.utils.unwrapObservable(allBindings.select2);
$(el).select2(select2);
}
};
function initSelect(element, callback) {
console.log("initSelect");
var selectedItems = $.grep(this.states, function (e) { return e.id == element.id; });
console.log(element);
callback(selectedItems[0]);
}
【问题讨论】:
-
你的initSelect函数没有被调用的原因是select2认为你的占位符被选中了。您需要使用输入元素,而不是 div,因为 select2 将尝试通过调用 jQuery 的 val 函数来读取元素的当前“值”。 div 元素将始终返回 ""
标签: javascript jquery knockout.js jquery-select2