我有以下Select2配置。
$scope.select2Options = {
simple_tags: false,
placeholder : "Search for a language",
multiple : true,
contentType: "application/json; charset=utf-8",
minimumInputLength : 3,
ajax : {
url : "/bignibou/utils/findLanguagesByLanguageStartingWith.json",
dataType : 'json',
data : function(term) {
return {
language : term
};
},
results : function(data, page) {
return {
results :
data.map(function(item) {
return {
id : item.id,
text : item.description
};
}
)};
}
}
};
这允许我正确填充select2控件。
但是,当我使用Ajax发布包含标记的整个表单(以及其他)时会出现问题:发送到服务器的json数组包含具有两个名为 id
的属性的对象和 text
,而服务器需要 id
和 description
。
从我的json看到片段:
"languages":[{"id":46,"text":"Français"},{"id":1,"text":"Anglais"}]
select2是否允许将 text
的名称更改为其他内容?
答案 0 :(得分:14)
将我的js更改为以下内容对问题进行了排序:
function format(item) { return item.description; };
$scope.select2Options = {
simple_tags: false,
placeholder : "Search for a language",
multiple : true,
contentType: "application/json; charset=utf-8",
minimumInputLength : 3,
data:{ text: "description" },
formatSelection: format,
formatResult: format,
ajax : {
url : "/bignibou/utils/findLanguagesByLanguageStartingWith.json",
dataType : 'json',
data : function(term) {
return {
language : term
};
},
results : function(data, page) {
return {
results :
data.map(function(item) {
return {
id : item.id,
description : item.description
};
}
)};
}
}
};
注意:必须使用Select2顶级属性data
。
答案 1 :(得分:5)
以下是在ui-select2上使用自定义ID和文本属性所需的最低配置
$scope.clients: {
data: [{ ClientId: 1, ClientName: "ClientA" }, { ClientId: 2, ClientName: "ClientB" }],
id: 'ClientId',
formatSelection: function (item) { return item.ClientName; },
formatResult: function (item) { return item.ClientName; }
}
答案 2 :(得分:0)
Select2要求将为选项显示的文本存储在text属性中。您可以使用以下JavaScript从任何现有属性映射此属性:
var data = $.map(yourArrayData, function (obj) {
obj.text = obj.text || obj.name; // replace name with the property used for the text
obj.id = obj.id || obj.pk; // replace pk with your identifier
return obj;
});