Подтвердить что ты не робот

Select2 load data с помощью ajax не может выбрать любую опцию

У меня есть следующий код (JavaScript):

$('#cbxConnections').select2({
    minimumInputLength: 0,
    multiple: false,
    allowClear: true,
    placeholder:{
        text:"@Diccionario.Connections",
        id:" @Diccionario.Connections"
    },
    ajax:{
        url:'@Url.Action("GetActiveConnections","Admin")',
        dataType: 'json',
        type:'post',
        data:function(params){
            return {
                q: params.term
            };
        },
        processResults: function(data,page){
            return {
                results: data
            };
        }
    },
    escapeMarkup: function (markup) { 
        return markup; 
    },
    templateResult: function(response){
        return '<div>'+response.Name+'</div>';
    },
    templateSelection: function(response){
        return response.Id;
    },
    id: function(connection){
       console.log(connection);
    }
});

Для серверной части я использую ASP MVC 4. Команда select получает данные с помощью ajax и отображает параметры, но эти параметры недоступны для выбора. Читая другие посты, они описывают использование функции id, но эта функция явно исчезает в версии select2, которую я использую 2.4

Я следую примеру ajax в документации, показывающей на github "Загрузка удаленных данных"

4b9b3361

Ответ 1

Если ваш ответ ajax не содержит атрибутов id и текста, вы должны исправить их на стороне клиента

Это требование для версии 4.0 (не знаю почему)

ajax: {

   processResults: function (data, params) {

                params.page = params.page || 1;

                // you should map the id and text attributes on version 4.0

                var select2Data = $.map(data.result.data, function (obj) {
                    obj.id = obj._id.$id;
                    obj.text = obj.name;

                    return obj;
                });

                return {
                    results: select2Data,
                    pagination: {
                        more: data.result.more
                    }
                };
            }

 }