2017-02-07 4 views
0

Я пытаюсь отобразить некоторую информацию на моем компоненте select2, но он не работает на 100%.Select2 & Ajax - Загрузить значения с помощью select2 + ajax + multiple option

После нескольких часов поисков, я сделал это:

<div class="row"> 
     <div class="col-md-12"> 
      {!! Form::label('lblRequisitos', 'Selecione os Requisitos') !!} 
      {!! Form::select('requisitos[]', $requisitosVaga, null, ['id'=>'requisito', 'class'=>'form-control js-states', 'multiple' => 'multiple']) !!} 
     </div> 
    </div> 

@push('scripts') 
<script> 
    $(function() 
    { 
     $('#requisito').select2(
     { 
      placeholder: "Escolha a habilidade...", 
      minimumInputLength: 2, 
      ajax: 
      { 
       url: '{{route('pesquisa-habilidade')}}', 
       dataType: 'json', 
       data: function (params) 
       { 
        return {q: $.trim(params.term)}; 
       }, 
       processResults: function (data) { 
        return { 
         results: data 
        }; 
       }, 
       cache: true 
      }, 
      initSelection : function (element, callback) { 
       var data = []; 
       $(element).find("option").each(function() { 
        data.push({id: $(this).val(), text: $(this).text()}); 
       }); 
       callback(data); 
      } 
     }); 
    }); 
</script> 
@endpush 

С его начальная нагрузка ок. Но когда я пытаюсь выполнить поиск следующего значения (когда я пытаюсь редактировать), он очищает все параметры.

+0

Вы должны показать, что происходит в 'route ('pesquisa-habilidade')' на стороне контроллера – phaberest

+0

@phaberest hello. На стороне сервера все работает на 100%. Я просто терял «избранные» иены. Я просто добавляю «$ (this) .prop (« selected », true); для опции, предварительно загруженной, и теперь все в порядке. Тонки для ухода. –

ответ

0

Возможно, это не лучшее решение, но я исправлю это.

только добавить последующую строку:

//.... At select2 function ... 

initSelection : function (element, callback) { 
      var data = []; 
      $(element).find("option").each(function() { 
       data.push({id: $(this).val(), text: $(this).text()}); 

       // ADD this line to put the option selected 
       $(this).prop('selected', true); 
      }); 
      callback(data); 
     } 
// .... 

Теперь он работает на 100%.

У кого-нибудь есть лучшее решение?

+0

Что вы получаете в консоли браузера? –

+0

Здравствуйте @ HasanAl-Natour. У меня не было сообщения об ошибке. Просто параметры были чистыми, когда я положил новый элемент на select2. Сейчас все в порядке. Но я не думаю, что мое решение «приемлемо», как хорошая оценка. –

+0

Ваша проблема не ясна для меня, но добавленная вами строка выбирает все варианты по одному, поэтому это не очень хорошая практика. –