我正在尝试使 select2 与我的 ajax 加载的带有嵌套属性的 json 数据一起工作。我想得到这样的东西http://ivaynberg.github.io/select2/#multi。
示例 json:
[{
id: 1,
name: "GroupName",
users: [{id: 1, name: 'UserName'}, {id: 2, name: 'SecondUser}]
}]
在他们使用<optgroup label="GroupName"><option value="1">UserName</opyion></optgroup>
并获得正确结果的网站上。
在我的情况下,它正确显示嵌套,但我只能选择GroupName
,但我需要选择嵌套userName
并使其GrouoName
不可选择,仅用于信息目的。
代码:
$('#user_tokens').select2({
placeholder: "Search for a user",
minimumInputLength: 0,
tags: true,
multiple: true,
ajax: {
url: "messages/users_data.json",
dataType: 'json',
quietMillis: 100,
data: function(search, page) {
return {
q: search,
per: 3,
page: page
};
},
results: function(data, page) {
return {
results: data,
};
}
},
formatResult: formatResult,
formatSelection: formatSelection,
dropdownCssClass: "bigdrop"
});
格式结果:
var formatUserResult = function(data) {
var optgroup = "";
var users = "";
if (data.name !== undefined) {
data.users.forEach(function(e) {
users += "<li class='select2-results-dept-1 select2-result select2-result- selectable'>" +
"<div class='select2-result-label'>" +
"<span class='select2-match'></span>"+
e.firstname +
"</div>" +
"</li>";
});
optgroup += "<div class='select2-result-label'>" +
"<span class='select2-match'></span>" +
data.name + "</div>" +
'<ul class="select2-result-sub">' + users + '</ul>';
}
return optgroup;
}
问题是 optgroup 必须class: 'select2-result-unselectable'
不知道如何处理它。