2012-11-01 14 views
6

Ich bin auf der Suche nach einer eleganten Möglichkeit, Modelle zu einer Sammlung voranzustellen, wenn Sie sie hinzufügen. Im Backbone-Quellcode gibt es dafür eine unshift-Methode, aber die Methode add zum Hinzufügen von Modellen zu einer Sammlung ist zu komplex, um sie einfach zu erweitern. Ich baue eine Diashow, die von Fotos und Tweets abhängig ist und immer das Neueste an der Spitze, das Älteste zuletzt zeigen sollte. Vereinfachung von meinem Problem:Prepend Modelle zur Sammlung

initialisieren App, API-Aufruf zurückkehrt:

apple, banana, lemon 

So Apfel ist die neueste Folie. Die Sammlung wird gebaut:

apple, banana, lemon 

Nach Intervall, prüft API-Aufruf, ob neuere Früchte, Ergebnis:

orange 

Sammlung anhängt Modell:

(apple, banana, lemon), orange 

Das ist nicht, was ich will; Orange ist die neueste Frucht und Apfel danach. Aber in diesem Fall könnte ich meine ursprüngliche Sammlung vor dem Anhängen umkehren und beim Zeichnen von Dias erneut umkehren. Nun werden die Dinge komplizierter (I Klammern hinzugefügt zu klären):

API-Aufruf prüft, ob noch mehr Früchte:

pineapple, kiwi 

Sammlung anhängt neue Modelle eins nach dem anderen:

((apple, banana, lemon), orange), pineapple, kiwi 

So, jetzt Von Neu zu Alt sieht meine Sammlung so aus:

((not so old, older, oldest), pretty new), brand new, new 

Was macht absolut keinen Sinn :)

Natürlich könnte die Änderung der API-Antwort mein Leben einfacher machen, aber das ist derzeit keine Option; es sollte auch nicht wirklich wichtig sein, da die Reihenfolge der Items in der Antwort neu ist -> alt, was für mich in Ordnung ist.

Ich konnte eine out-of-the-Box-Lösung dafür nicht finden und ich möchte nicht Dinge durch Klonen eines Teils der Backbone-Quelle zu unshift neue Modelle zu kompliziert. Vorschläge? Vielen Dank!

+1

Wie funktioniert 'nichtshift' nicht? Aus der Dokumentation "Hinzufügen eines Modells am Anfang einer Sammlung. Nimmt dieselben Optionen wie Hinzufügen an." – JayC

+0

Da ich der Sammlung kein Modell manuell hinzufüge, verwende ich ein Intervall, um Json vom Server abzurufen, und Backbone hängt jedes Objekt als Modell an die Sammlung an. Sicher könnte ich eingreifen und "Unshift" verwenden, aber das hätte meinen Code komplexiert (vielleicht hätte ich darauf hinweisen sollen, dass meine API-Endpont keine echte Repräsentation meiner Sammlung ist, es ist eine Art "Streaming" -Kollektion) – Phortuin

Antwort

5

Wenn die Modelle irgendeine Art von Datum oder Zeit mit ihnen oder in der Tat eine andere Art der Bestellung haben (Sie können möglicherweise manuell bei Bedarf hinzufügen) können Sie die Sammlung durch die Implementierung der comparator Funktion in Ihrer Sammlung zu sortieren. Siehe:

http://backbonejs.org/#Collection-comparator

+1

Danke !! Ich weiß nicht, wie ich das in den Dokumenten übersehen habe. Problem gelöst: 'this.collection.comparator = function (model) {return -model.Zeit bekommen"); } ' – Phortuin

+0

Für diejenigen, die auf einem umgekehrten created_at Komparator nicht funktioniert haben, vergessen Sie nicht, die Zeichenfolge vor dem Negieren zu analysieren! '' Funktion (Modell) {return -Date.parse (model.get ('created_at'))} '' –