Flex: Sort - Eine benutzerdefinierte compareFunction schreiben?

8

OK, ich sortiere eine XMLListCollection in alphabetischer Reihenfolge. Ich habe jedoch ein Problem. Wenn der Wert "ALL" ist, möchte ich, dass er in der Liste zuerst angezeigt wird. In den meisten Fällen geschieht dies bereits, aber Werte, die Zahlen sind, werden vor "ALL" sortiert. Ich will "ALL" immer die erste Auswahl in meinem DataProvider und dann den Rest alphabetisch.

Ich versuche also meine eigene Sortierfunktion zu schreiben. Gibt es einen Weg, ich kann überprüfen, ob einer der Werte alle ist, und wenn nicht sagen Sie ihm, den regulären Vergleich der Werte zu tun?

Hier ist was ich habe:

%Vor%

Gibt es eine Lösung für das, was ich versuche zu tun?

    
JD Isaacks 02.09.2009, 14:42
quelle

4 Antworten

8

Nun, ich habe etwas ausprobiert, und ich bin wirklich überrascht, dass es tatsächlich funktioniert hat, aber hier ist was ich getan habe.

Die Klasse Sort hat eine private Funktion namens internalCompare. Da es privat ist, kann man es nicht anrufen. ABER gibt es eine Getter-Funktion namens compareFunction, und wenn keine Vergleichsfunktion definiert ist, gibt sie einen Verweis auf die Funktion internalCompare zurück. Also, was ich getan habe, war diese Referenz zu bekommen und es dann zu nennen.

%Vor%     
JD Isaacks 02.09.2009, 15:03
quelle
14

Die Lösung von John Isaacks ist großartig, aber er hat die Variable "fields" vergessen und sein Beispiel funktioniert nicht für kompliziertere Objekte (außer Strings)

Beispiel:

%Vor%     
Jarek Szczepański 09.10.2009 13:32
quelle
0

Danke Jungs, das hat sehr geholfen. In unserem Fall benötigten wir alle leeren Zeilen (in einem DataGrid) auf der Unterseite. Alle nicht leeren Zeilen sollten normal sortiert sein. Unsere Zeilendaten sind alle dynamischen Objekte (aus JSON konvertiert) - der Aufruf von ValidationHelper.hasData () prüft einfach, ob die Zeile leer ist. Aus irgendeinem Grund enthalten die Felder manchmal den Wert dataField String anstelle von SortFields, daher die Überprüfung vor dem Festlegen der Eigenschaft 'fields':

%Vor%     
Ola 14.05.2010 14:55
quelle
-1

Ich habe diese Ansätze für meine Situation nicht gefunden, nämlich um eine Liste von Strings zu alphabetisieren und dann am Ende der Liste ein Element 'Create new ...' anzuhängen.

Die Art, wie ich mit den Dingen umging, ist ein wenig unelegant, aber zuverlässig.

Ich habe meine ArrayCollection von Strings, genannt orgNameList , mit einer Alpha-Sortierung wie folgt sortiert:

%Vor%

Dann habe ich die Elemente der sortierten Liste in ein neues ArrayCollection kopiert, das customerDataList heißt. Dies führt dazu, dass die neuen ArrayCollection der Elemente in alphabetischer Reihenfolge stehen, aber nicht unter dem Einfluss eines Sort -Objekts stehen. Wenn Sie also ein neues Element hinzufügen, wird es am Ende von ArrayCollection hinzugefügt. Das Hinzufügen eines Elements zu einem bestimmten Index in ArrayCollection funktioniert ebenfalls wie erwartet.

%Vor%

Dann habe ich gerade den Eintrag 'Create new ...' angehakt, wie folgt:

%Vor%     
Ross Henderson 17.01.2011 19:19
quelle

Tags und Links