Я могу легко извлекать и форматировать данные AJAX для работы с Select2, например:
function formatItem (item) {
if (!item.id) {
return item.text;
}
var _item = '<span class="' + item.deleted +'"><i class="fa fa-user"></i> ' + item.doctor + ', <small>' + item.sex + ' (' + item.user + ')</small></span>';
return $(_item);
}
var tabSelect = $('#t');
tabSelect.select2({
ajax: {
url: '../ajax/results.php',
data: function (params) {
return {
search: params.term,
page: params.page || 1
};
}
},
templateResult: formatItem,
templateSelection: formatItem
});
Пока все хорошо: <select>
элементы отображаются правильно как HTML, с симпатичным значком Font-Awesome итег <small>
.
Теперь пользователь выбирает элемент и отправляет форму (поиска).Конечно, я хотел бы пометить текущий элемент как selected
, и тут возникает проблема.
В документах Select2 есть способ предопределить извлеченный AJAX элемент , но это работает дляпростой текст, а не для отображаемых элементов со всеми прибамбасами HTML
Итак, при адаптации предоставленного примера:
$.ajax({
type: 'GET',
url: '../ajax/results-selected.php', // url to retrieve a single item
data: {
iData: [here goes the ID for retrieving single item]
}
}).then(function (data) {
// create the option and append to Select2
var item = data.results[0];
console.log(item);
var option = new Option(item, item.id, true, true);
tabSelect.append(option).trigger('change');
// manually trigger the `select2:select` event
tabSelect.trigger({
type: 'select2:select',
params: {
data: data
}
});
});
Я получаю отображаемый элемент HTML, но с серией undefined
(обратите внимание, что console.log(item)
возвращает ожидаемый результат: другими словами, у меня есть поля, но я не знаю, как их отобразить)
Я много чего перепробовал, но ни одна из них не сработала, например:
var option = new Option(formatItem(item), item.id, true, true);
Я перечитал, но не смог найти подходящее решение: пожалуйста, какая-нибудь помощь?