2017-05-12 5 views
0

Ich versuche, ein Array von Objekten in alphabetischer Reihenfolge zu sortieren. Doch irgendwie das vaadin-combo-box Polymerelement zeigt nur das erste Element in dem Array nach einer Art (auch wenn es mehr Elemente im Array sind)Vaadin-Combo-Box Sortierung

enter image description here

enter image description here

Ich erhalte meine Daten aus Firebase (genannt settingsData) so habe ich einen Spleißstellen Beobachter verwenden, um zu sehen, ob die Daten hinzugefügt werden, oder entfernen:

Observer

observers: [ 
    'sortData(settingsData.splices)' 
], 



sortData: function(newD, oldD) { 
    if(newD) { 
     var tmp = this.settingsData.sort(function(a,b) {return (a.name.toUpperCase() > b.name.toUpperCase()) ? 1 : ((b.name.toUpperCase() > a.name.toUpperCase()) ? -1 : 0);}); 
     //tmp is an array in the correct order 
     this.set("filteredItems", tmp); 
    } 
} 

HTML

<vaadin-combo-box id="picker" label="[[label]]" items="[[filteredItems]]" item-label-path="name" item-value-path="name" value="{{valueText}}" on-value-changed="valueChanged"></vaadin-combo-box> 

Antwort

0

Irgendwie ist der Beobachter für die Array-Mutationen wird nach dem ersten Mal nicht gefeuert. Dies bedeutet, dass die Ansicht für die vaadin-combo-box nicht korrekt wiedergegeben wird, was ein wenig seltsam erscheint?

Das Löschen des Arrays jedes Mal, wenn ich versuche, die neuen Daten festzulegen, hat den Trick gemacht.

this.set("filteredItems", []); 
this.set("filteredItems", tmp); 
+1

Dies ist eigentlich eine Polymer Best-Practice; Es zwingt das DOM zu aktualisieren. :) –

0

Entweder this.settingsData.sort gibt wirklich nur 1 Punkt oder Blinddaten Firebase bricht es. Kann nicht mit Inline-Array-Daten reproduziert werden.