2016-05-02 34 views
0

Ich versuche, select2 haken, wenn ein Element die Klasse "select2picker" hat, ich bin auch anpassen, wenn die Quelle der Dropdown-Liste ein Array ist. Mein Code untenSelect2 json data funktioniert nicht

$('.select2picker').each(function() { 
       var settings = {}; 


       if ($(this).attr('data-json')) { 
        var jsonValue = JSON.parse($(this).attr('data-json')).val()); 
        settings = { 
         placeholder: $(this).attr('data-placeholder'), 
         minimumInputLength: $(this).attr('data-minimumInputLength'), 
         allowClear: true, 
         data: jsonValue 
        } 
       } 

       $(this).select2(settings); 
      }); 

aber das Ergebnis ist schrecklich es nicht die ganze select2 Dropdownlist-hook enter image description here

aber wenn ich die Dateneigenschaft auf Kommentar, der Ausgang zeigt perfekt (aber die Datenbindung verloren geht) enter image description here

Mein Array sieht wie folgt aus

[ { "id": "2015-0152", "text": "2015-0152" }, { "id": "2015-0153", "text": "2015-0153" }, { "id": "2016-0001", "text": "2016-0001" }, { "id": "2016-0002", "text": "2016-0002" }, { "id": "2016-0003", "text": "2016-0003" }, { "id": "2016-0004", "text": "2016-0004" }, { "id": "2016-0005", "text": "2016-0005" }, { "id": "2016-0006", "text": "2016-0006" }, { "id": "2016-0007", "text": "2016-0007" }, { ... }, { "id": "2015-0100", "text": "2015-0100" }, { "id": "2015-0101", "text": "2015-0101" }, { "id": "2015-0080", "text": "2015-0080" }, { "id": "2015-0081", "text": "2015-0081" }, { "id": "2015-0090", "text": "2015-0090" }, { "id": "2015-0102", "text": "2015-0102" }, { "id": "2015-0112", "text": "2015-0112" }, { "id": "2015-0128", "text": "2015-0128" }, { "id": "2015-0136", "text": "2015-0136" } ] 

Ich bin wirklich verwirrt darüber, was falsch läuft. Irgendeine Idee?

Select2 Version: 3.4.8

Antwort

1

Diese Linie gibt einen Fehler: var jsonValue = JSON.parse($(this).attr('data-json')).val());

werden sollten: var jsonValue = JSON.parse($(this).attr('data-json'));.

Auch diese Zeile in Ihrer Frage:

i am also customising if the source of the dropdown list is an array

mir Gibt an, dass es könnte auch nicht ein Array sein. In diesem Fall sollten Sie überprüfen, ob es sich um ein Array handelt, bevor Sie die Daten an select2 übergeben.

EDITED: Eine andere Sache, die mir in den Sinn kam, war die folgende. Wenn Sie mit Dateneigenschaften für den Platzhalter Ich glaube nicht, dass Sie die Werte dieser Eigenschaften übergeben müssen ein zweites Mal Select2 wie Sie hier tun

placeholder: $(this).attr('data-placeholder'), 
minimumInputLength: $(this).attr('data-minimumInputLength'), 

könnte sein, dass Sie eine auswählen müssen, die beiden (entweder übergeben Sie es in Ihren Einstellungen oder verwenden Sie ein Attribut). Als select2 betrachtet die Datenattribute, um einen Wert zu erhalten.

Ich überprüfte, ob das oben Richtige war, stellt sich heraus es ist nicht. Es funktioniert gut in dieser Geige: https://jsfiddle.net/wL7oxbpv/

Ich denke, es ist etwas falsch mit Ihren Array-Daten. Bitte überprüfe das.