2013-02-27 2 views
3

У меня возникли проблемы с установкой метода initSelection с помощью вызова ajax, я возвращаю «undefined». Я проверил, и вызов ajax возвращает правильный результат. Я не понимаю, как установить метод обратного вызова, чтобы убедиться, что вы выбрали «заданное значение».Select2 initSelection

function mediaFormatResult(media) { 
     var markup = "<div class='media-title'>" + media.name + ", " + media.prov + " (" + media.region + ")</div>"; 

     return markup; 
    } 

    function mediaFormatSelection(media) { 
     return media.name +", " + media.prov + " (" + media.region + ")"; 
    } 
    $field = $('#comune'); 
    $($field).select2({ 
     placeholder: "Seleziona il tuo comune", 
     minimumInputLength: 3, 
     initSelection: function(element, callback) { 

     return $.ajax({ 
      type: "POST", 
      url: "myurl", 
      dataType: 'json', 
      data: { id: (element.val())}, 
      success: function(data){ 
       //results: data.results; 
      } 
     }).done(function(data) { 
      //console.log(data); 
      callback(data); 
     }); 

     }, 
     ajax: { 
      quietMillis: 100, 
      url: "myurl", 
      dataType: 'json', 
      type: 'POST', 
      data: function (term, page) { 
       return { 
        q: term, 
        page_limit: 10 
       }; 
      }, 
      results: function (data, page) { 
       return {results: data.results}; 
      } 
     }, 
     formatResult: mediaFormatResult, 
     formatSelection: mediaFormatSelection, 
     formatNoMatches: function() { return "Nessun risultato trovato!";}, 
     formatSearching: function() { return "Ricerco.."; }, 
     formatInputTooShort: function(input, min) {return "Inserire "+ (min - input.length) + " caratteri.";}, 
     dropdownCssClass: "bigdrop", 
    }); 

Что-то не так?

+0

я ответил на другой вопрос. Посмотрите: http://stackoverflow.com/a/30625628/2788478 –

ответ

3

Вот способ решить:

initSelection: function(element, callback) { 

     return $.ajax({ 
      type: "POST", 
      url: path, 
      dataType: 'json', 
      data: { id: (element.val())}, 
      success: function(data){ 

      } 
     }) 

необходимо позаботиться о том, что массив создается в контроллере, и это должно быть что-то вроде этого:

foreach ($entities as $member) { 
     $json['id'] = $member->getId(); 
     $json['name'] = $member->getComune(); 
     $json['region'] = $member->getRegione()->getRegione(); 
     $json['prov'] = $member->getProvincia()->getSigla(); 
} 

     $result = $json; 
     return json_encode($result); 
11

Обратите внимание, данные, отправить функцию обратного вызова, должен быть объект, с id и текст атрибутов.

Это то, что работает для меня:

initSelection: function(element, callback) { 
    var id; 
    id = $(element).val(); 
    if (id !== "") { 
     return $.ajax({ 
     url: url, 
     type: "POST", 
     dataType: "json", 
     data: { 
      id: id 
     } 
     }).done(function(data) { 
     var results; 
     results = []; 
     results.push({ 
      id: data.id, 
      text: data.name 
     }); 
     callback(results[0]); 
     }); 
    } 
    } 
+0

Приобретено. Не знаете, что другой ответ достигается с помощью пустого обработчика успеха? –

+0

спасибо! после многого мучения, это решило это! –

+0

Параметр 'initSelection' устарел в пользу пользовательского адаптера данных (Select2 version 4+), см. Https://select2.github.io/options.html. – lubosdz