我需要集成一个由远程服务填充的select2多个选择和淘汰赛。当然,只有选定的选项应该绑定,而不是来自远程的可用选项。
如果binded元素是select,那将是一个简单的任务(selectedOptions绑定),但是如果基于输入,则没有。
我创建了一个尝试操作knockout observable的更改事件,它或多或少地完成了它的工作,但它与绑定不同,例如当我在我的spa中的另一个页面上实例化该组件时,它被视为一个完全新的实例,我将不得不手动同步所选的选项,通常做淘汰的工作......
我的代码
var CodeItem = function(code) {
this.code = ko.observable(code);
};
self.values = ko.observableArray([]);
self.selectedIPCs = ko.observableArray([]);
$(".ipcMulti").select2({
placeholder: "enter ipc",
minimumInputLength: 2,
multiple: true,
id: function(obj) {
return obj;
},
ajax: {
url: "/assets/Content/suggest_ipcr.json",
dataType: 'json',
data: function (term, page) {
return {
q: term // search term
//page_limit: 10,
};
},
quietMillis:100,
results: function (data, page) {
return {results: data.spellcheck.suggestions[1].suggestion};
}
}
});
$(".ipcMulti").on("change",function(e){
underlyingArray = self.selectedIPCs();
if (e.added !== undefined) {
underlyingArray.push(new CodeItem(e.added));
} else if (e.removed !== undefined) {
var todelete = null;
ko.utils.arrayForEach(self.selectedIPCs(), function(item) {
var o1 = e.removed;
var value = item.code();
if (o1==value) {
todelete = item;
}
});
ko.utils.arrayRemoveItem(underlyingArray, todelete);
}
});