Ember - Array nach mehreren Eigenschaften in mehrere Richtungen sortieren

8

Ich muss eine Sammlung von Ember-Modellen nach mehreren Eigenschaften sortieren und nicht in der gleichen Richtung / Reihenfolge. I.e. Ich muss nach der Eigenschaft a in der Reihenfolge aufsteigend und nach der Eigenschaft b in absteigend sortieren. Gibt es einen Weg, dies zu erreichen?

Aktualisieren

Ich habe versucht, die Eigenschaft sortAscending auf ein Array zu setzen, aber es funktioniert nicht. Nach dem Einblick in die Quelle scheint diese Funktionalität (noch) nicht unterstützt zu werden.

    
Shimon Rachlenko 21.02.2013, 09:51
quelle

3 Antworten

14

In Ihrem ArrayController:

%Vor%

Dann referenzieren Sie sortedModel im #each -Handler Ihrer Vorlage.

    
neverfox 11.05.2014, 18:27
quelle
5

Ich habe mich entschieden, ein mixin zu erstellen, das das Sortieren in mehreren Ordnungen (Richtungen) erlaubt. Es erweitert die SortableMixin versucht so weit rückwärtskompatibel wie möglich. Tatsächlich kann es als reguläres SortableMixin verwendet werden. Was hinzugefügt wird, ist die Eigenschaft sortAscendingProperties , die ein Array von Sortiereigenschaftsnamen (Mitglieder von sortProperty array) ist, die in aufsteigender Reihenfolge sortiert werden sollten. Wenn die Eigenschaft in sortAscendingProperties ist, wird sie in aufsteigender Reihenfolge sortiert, andernfalls wird sie nach sortAscending sortiert, was als eine Art Standard dient.
Ich nannte das Mixin MultiSortableMixin , obwohl ich denke, dass es nicht der beste Name ist.

%Vor%

Anwendungsbeispiel:

%Vor%

In diesem Beispiel wird der Inhalt von ThingsController nach prop1 sortiert - in absteigender Reihenfolge, dann nach prop2 und prop3 - beides in aufsteigender Reihenfolge.

    
Shimon Rachlenko 04.03.2013 12:37
quelle
0

Dies ist keine Standardfunktion von Ember. Aber schauen Sie sich den Code von SortableMixin an Man kann sehen, dass Ember.compare verwendet wird, um zwei Entitäten zu vergleichen:

%Vor%

Und Ember.compare enthält einen Blick auf das Vergleichbare Mixin :

%Vor%

Deshalb ist meine vorgeschlagene Lösung:

1 - Fügen Sie Ihren Modellen ein zusätzliches Feld hinzu, das ein Wrapper-Objekt aller Ihrer sortingProperties enthält, z. "combinedAandB"

%Vor%

2 - Ihr ComparatorModel (App.AandBComparator) sollte das Comparable Mixin implementieren. Innerhalb dieser Vergleichsmethode respektieren Sie Ihr gewünschtes Sortierverhalten (Prop aufsteigend und Prop absteigend).

3 - Sie können nun einen ArrayController instanziieren und ihn basierend auf Ihrer kombinierten Eigenschaft sortieren:

%Vor%

Hinweis: Dies ist nur eine spontane Idee, die ich beim Lesen Ihrer Anforderung habe. Das habe ich noch nicht umgesetzt. Also das ist wahrscheinlich nicht perfekt: -)

    
mavilein 21.02.2013 10:53
quelle

Tags und Links