2015-03-10 2 views
1

Я использую ajax для заполнения значений в select2 single-select.select2 initialize с выбранным значением при обратном вызове

Select2 можно инициализировать вот так (JQuery):

$("#domain").select2({ 
    placeholder: "Placeholder text", 
    allowClear: true, 
    multiple: false, 
    ajax: { 
     url: "/json/domain", 
     dataType: "json", 
     data: function(term, page) { 
      return { 
       q: term, 
      }; 
     }, 
     results: function(data, page) { 
      return data; 
     } 
    } 

Это пример ответа:

{"results":[{"id":"1234","text":"Name"}]} 

После того, как значение выбрано, Select2 обновляет скрытый вход с идентификатором и отображает «Имя» в промежутке.

Select2 является частью POST, которая запрашивает кучу данных на основе выбранных значений.

Таким образом, после обратной передачи выбранное значение «Имя» естественно уходит из DOM (в то время как «id» сохраняется в скрытом вводе).

Есть ли способ инициализировать select2 после обратной передачи с выбранным значением перед отправкой (отображает предварительный ответ после замены)?

Оглядевшись здесь на SO и в других местах, я пытался что-то вроде этого:

$("#domain").select2({ 
    placeholder: "Placeholder text", 
    allowClear: true, 
    multiple: false, 
    ajax: { 
     url: "/json/domain", 
     dataType: "json", 
     data: function(term, page) { 
      return { 
       q: term 
      }; 
     }, 
     results: function(data, page) { 
      return {results: data}; 
     }    
    }, 
    initSelection: function(element, callback) { 
     var id = $('#domain').val(); 
     if(id !== "") { 
      $.ajax("/json/domain", { 
       dataType: "json" 
      }).done(function(data) { 
       callback(function(data) { callback(data); }); 
      }); 
     } 
    } 
}); 

Это инициализирует но возвращает «неопределенный». Я предполагаю, что это потому, что данные не передаются в initSelection ...

Любые указатели в правильном направлении были бы высоко оценены.

ответ

0

Все хорошо, кроме этого

initSelection: function(element, callback) { 
    var id = $('#domain').val(); 
    if(id !== "") { 
     $.ajax("/json/domain", { 
      dataType: "json" 
     }).done(function(data) { 
      callback(function(data) { callback(data); }); 
     }); 
    } 
} 

Не должно быть

initSelection: function(element, callback) { 
    var id = $('#domain').val(); 
    if(id !== "") { 
     $.ajax("/json/domain", { 
      dataType: "json" 
     }).done(function(data) { 
      callback(data); // here 
     }); 
    } 
} 

Пока data в следующем формате

[{id: 'this', text: 'this'}] 
+0

Это снова возвращает 'undefined' на входе (также на начальной странице, а не после отправки). Ajax все еще работает нормально и возвращает данные в правильном формате. – MNorup

0

Поправьте меня, если я неправильно, но initSelection является опцией Select2 3.5.2.

В выбор2 4.0

Это теперь выполняется с помощью адаптера данных в текущем методе, который позволяет выбор2 преобразовать выбранные значения в данных объектов, которые могут быть отображены.

Смежные вопросы