Backbone: umgekehrte Sortierreihenfolge der Modelle in einer Sammlung

Erstellt am 11. Apr. 2011  ·  12Kommentare  ·  Quelle: jashkenas/backbone

Hallo,

Was ist der beste Weg, um die Sortierreihenfolge einer Sammlung umzukehren? Mein Komparator sortiert alle Modelle nach Datum.
aber ich würde sie in umgekehrter Reihenfolge brauchen. Die Verwendung von toArray() und reverse() scheint ziemlich hässlich.

Da mir hier nichts Wichtiges fehlt, würde ich für ein Backbone-Modellattribut stimmen, um das festzulegen
Sortierreihenfolge zusammen mit dem Komparator.

Prost,
Daniel

question

Hilfreichster Kommentar

Sie könnten auch tun

collection.set(collection.models.reverse(), {sort: false});

Alle 12 Kommentare

Der beste Weg, um die Art der Sammlung umzukehren, besteht darin, einen negativen Wert aus Ihrem Vergleichskriterium zurückzugeben.

comparator : function(model) {
  return -model.get('date');
}

Wie soll das funktionieren, wenn alphabetisch nach einem Zeichenfolgenwert sortiert wird?

Wenn Sie nur Zeichenfolgenwerte haben, konvertieren Sie diese möglicherweise in ein Datum vor?
Ich hatte das gleiche Problem und das löste es.

comparator : function(model) {
  return -new Date(model.get('date'));
}

Dies funktioniert nur für Datumsangaben (die in Zahlen umgewandelt werden, wenn Sie ihnen - voranstellen), nicht jedoch für beliebige Zeichenfolgen, die Sie alphabetisch sortieren möchten.

Sie haben natürlich Recht, ich nahm an, Sie sprachen immer noch über Daten (wie das OP), aber Ihr Datum war eine konvertierbare Zeichenfolge. Mein Fehler dann :).

Die nächste Version von Backbone (und der aktuelle Master) unterstützt sort -Bestellungen für Komparatoren (anstelle von nur sortBy ), sodass Sie sie auf die übliche Weise definieren können.

comparator: function(a, b) {
  ...
}

Was tun Sie, wenn Sie mehrere Anwendungsfälle für dieselbe Sammlung haben, von denen einige in der einen und die andere in der umgekehrten Reihenfolge angezeigt werden sollen? Ihre Komparator- und Sortierimplementierungen können nur die eine oder andere Richtung auswählen. Es scheint keine Collection.reverse () zu geben, um die Sortierrichtung schnell wechseln zu können (aufsteigend oder absteigend).

@ elwayman02 Sie können nur 2 Sammlungsinstanzen verwalten (Sammlung # Klon kann helfen)

Das ist nicht besonders nützlich ... Nehmen wir zum Beispiel eine Situation, in der die Sammlung ein Datenraster darstellt, das ich wiederholt in mehrere Richtungen sortieren werde. Es ist nicht sinnvoll, zwei verschiedene Datenquellen zu pflegen und zwischen ihnen zu wechseln. Es sollte ein Datenobjekt geben, das wir nach Bedarf bearbeiten.

Ich habe mehrere Komparatoren in einer Sammlung gespeichert und sie nach Bedarf ausgetauscht.

var Collection = Backbone.Collection.extend({
  comparators: {
    a: function () {},
    b: function () {}
  },

  setComparator: function (key) {
    this.comparator = this.comparators[key];
    return this;
  }
});
var collection = new Collection();
collection.setComparator('a').sort();
collection.setComparator('b').sort();

Das ist eine bessere Problemumgehung, obwohl ich immer noch nicht verstehe, warum eine Problemumgehung erforderlich ist, anstatt dass das Backbone lediglich eine reverse () -Methode unterstützt.

Sie könnten auch tun

collection.set(collection.models.reverse(), {sort: false});
War diese Seite hilfreich?
0 / 5 - 0 Bewertungen