Может ли Select2 разрешить изменение имени "текстового" ключа на что-то еще?
У меня есть следующая конфигурация 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
на что-то еще?
Ответы
Ответ 1
Изменение 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
.
Ответ 2
Здесь голый минимум конфигурации должен использовать пользовательские свойства идентификатора и текста на ui-select2
$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; }
}
Ответ 3
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;
});
Документация