Сегодня я столкнулся с, казалось бы, простой задачей по стилизации при использовании плагина Select2, но кажется, что то, чего я хочу достичь, сложнее, чем я думал. Вот что я хочу сделать:
Пользователь должен иметь возможность выбрать контакт из выпадающего меню. Каждая запись контакта должна отображаться в виде изображения профиля контакта и некоторых данных рядом с ним. В свернутом виде раскрывающийся список должен отображать выбранный контакт (т. е. изображение профиля выбранного контакта и некоторые данные рядом с ним) с «треугольником раскрывающегося списка» рядом с ним. В развернутом состоянии раскрывающийся список должен дополнительно отображать другие контакты, каждый с изображением профиля и данными. Проще говоря, я хочу использовать шаблоны, как описано в примере «Шаблоны» на примерной странице select2, только с более сложной компоновкой (изображение профиля слева плюс три строки текста рядом с изображением).
Мне удалось применить желаемый стиль к результатам, используя параметр formatResult
select2, используя функцию форматирования, которая оборачивает изображение и данные в стилизованные элементы div (обратите внимание, что я использую класс css 'media' Twitter Bootstrap для стайлинга):
function formatContactResult(item) {
if(!item.id)
return "No contact selected";
var contact = JSON.parse(item.text);
return "<div class='media'><a class='pull-left' href='#'><img style='margin-top: 5px;' class='media-object' data-src='holder.js/64x64' src='" + contact.thumbUrl + "' /></a><div class='media-body' style='font-size: 11px;'><strong>" + contact.displayName + "</strong><br />" + contact.jobTitle + "</div></div>"
};
Моя проблема: я не могу понять, как применить такой сложный макет к выделению. Я знаю об опции formatSelection
, но возвращаемое значение функции formatSelection
заключено в элемент span
, который не подходит для сложных макетов. Хотя я знаю, что это неверно, я попытался применить ту же функцию макета, о которой упоминал выше, но это, как и ожидалось, привело к странным результатам (желаемый макет был сдвинут далеко вправо).
Кто-нибудь знает, как я могу достичь описанного макета с помощью select2?
Если это представляет интерес, я использую плагин Select2 с Knockout.js и Twitter Bootstrap.