2016-04-03 22 views
0

Ich verwende Select2 4.0.2 für CRUD-Seiten. Jedoch, wenn ich versuche, selectbox in der edit Seite zu füllen/zu initialisieren, funktioniert es aus irgendeinem Grund nicht. Warum funktioniert es nicht? Hier ist ein Beispiel von dem, was ich gerade habe, es sollte mit der E-Mail-Adresse [email protected] gefüllt werden. https://gyazo.com/92a89f5462c36a8c26f4dcd365fb1fb9Select2 Initialwert funktioniert nicht

Es sollte so etwas wie dieses, aber ich es nicht die Arbeit an: https://gyazo.com/194fa8b11a61736039a5acda763065ae

<script> 
     token = '{{csrf_token()}}'; 
     $("#mainuser").select2({ 
      ajax: { 
       dataType: "json", 
       type: "POST", 
       data: function (params) { 
        return { 
         term: params.term, 
         '_token': token, 
         isnew: 'false', 
         partner_id: {{$partner->id}} 
        }; 
       }, 
       url: '/partners/getusers', 
       cache: false, 
       processResults: function (data) { 
        return { 
         results: data 
        }; 
       } 
      }, 
      "language": { 
       "noResults": function() { 
        return "Geen gebruikers gevonden.<br> <a href='/klanten/nieuw' class='btn btn-danger'>Maak nieuwe klant</a>"; 
       } 
      }, 

      escapeMarkup: function (markup) { 
       return markup; 
      } 
     }); 
     $("#mainuser").select2('data', {id: 1, text: '[email protected]'}); 

     // $("#mainuser").select2({...}).select2('data', {...}); doesn't work either... 

</script> 

Was ich jetzt habe, ist die Auswahlbox von AJAX bevölkert wird, wie erwartet, aber nicht gefüllt werden (wie es in einer edit Seite sein soll). Es sollte bereits mit dem `.select2 ('data', {id: ... text: ...}) gefüllt sein; Teil, aber es ist nicht mit diesem Wert gefüllt, wie Sie in dem Video sehen können, ist es immer noch leer. Ich habe this Artikel gelesen, aber es funktioniert nicht.

+0

Bitte beschreiben Sie, was Sie erwarten und was Sie bekommen. –

+0

Sie müssen diese Zeile '$ (" # mainuser ") ausführen. Select2 ('data', {id: 1, text: '[email protected]'});' wenn ajax fertig ist. Weil Sie jetzt den Wert auf "test @ gmail.com" setzen, aber diese Option ist noch nicht geladen. –

+0

@MoshFeu Versucht, Ihren Vorschlag zu verwenden, aber ich kann es immer noch nicht funktionieren – Markinson

Antwort

0

eine Lösung gefunden:

<script> 
     token = '{{csrf_token()}}'; 
     var select = $('#mainuser'); 
     select.select2({ 
      ajax: { 
       dataType: "json", 
       type: "POST", 
       data: function (params) { 
        return { 
         term: params.term, 
         '_token': token, 
         isnew: 'false', 
         partner_id: {{$partner->id}} 
        }; 
       }, 
       url: '/partners/getusers', 
       cache: true, 
       processResults: function (data) { 
        return { 
         results: data 
        }; 
       } 
      }, 
      "language": { 
       "noResults": function() { 
        return "Geen gebruikers gevonden.<br> <a href='/klanten/nieuw' class='btn btn-danger'>Maak nieuwe klant</a>"; 
       } 
      }, 

      escapeMarkup: function (markup) { 
       return markup; 
      } 
     }); 

     var $option = $('<option selected>Loading...</option>').val(1); 
     select.append($option).trigger('change'); // append the option and update Select2 

     $.ajax({ // make the request for the selected data object 
      type: 'POST', 
      url: '/partners/getmainuser', 
      dataType: 'json', 
      data : { '_token': token, 'isnew' : 'false'}, 
      headers: 
      { 
       'X-CSRF-Token': '{{csrf_token()}}' 
      } 
     }).then(function (data) { 
      // Here we should have the data object 
      $option.text(data.text).val(data.id); // update the text that is displayed (and maybe even the value) 
      $option.removeData(); // remove any caching data that might be associated 
      select.trigger('change'); // notify JavaScript components of possible changes 
     }); 


</script> 

Kinda bedauerlich, dass mit einem ganz anderen AJAX-Aufruf zu initialisieren sind verpflichtet, aber dies schien die einzige Möglichkeit zu sein.

Verwandte Themen