Я использую Select2 v4. У меня есть объект, и мне нравится получать все данные этого объекта. Когда я выбираю опцию и использую $ (_ id) .select2 ('data') [0]), он возвращает все данные выбранного объекта.
Но в случае редактирования, когда я добавляю опциюпрограммно
var option = new Option(this.device.serial, this.device.id.toString(), true, true);
this.objRef.append(option).trigger('change');
и снова выберите созданную опцию, он просто возвращает id и текст объекта, а не все данные. Если я использую пользовательский адаптер данных, он возвращает все данные:
CustomDataAdapter.prototype.updateOptions = function (data) {
let myData: any[] = [data];
this.$element.find('option').remove();
this.addOptions(this.convertToOptions(myData));
}
Но я не люблю использовать пользовательский адаптер. Есть ли способ преобразовать объект в параметр, аналогичный адаптеру данных, чтобы при следующем выборе он снова содержал все данные?
А вот определение select2. Данные загружаются раньше, и я использую ajax только для разбивки на страницы и поиска:
var $ddResult = $(_id).select2({
placeholder: '',
selectOnClose: _selectOnClose,
tags: _tags,
allowClear: _allowClear,
minimumResultsForSearch: 5,
ajax: {
transport: function (params, success, failure) {
let pageSize = 30;
let term = (params.data.term || '').toLowerCase();
let page = (params.data.page || 1);
if (timer)
clearTimeout(timer);
timer = setTimeout(function () {
timer = null;
let results = _data
.filter(function (f) {
return f.text.toLowerCase().includes(term);
});
let paged = results.slice((page - 1) * pageSize, page * pageSize);
let options = {
results: paged,
pagination: {
more: results.length >= page * pageSize
}
};
success(options);
}, params.delay);
}
},
})