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?
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.
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.
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.
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: -)
Tags und Links javascript sorting ember.js