Kann Backbone eine Sammlung in umgekehrter Reihenfolge rendern?

7

Ich verwende einen Signalr-Hub, um Ereignisse auf dem Server zu abonnieren. Was für ein Ereignis an einen Hub gesendet wird, das Hinzufügen des Elements zu einer Marionette CollectionView. Dies wird wiederum in eine Tabelle gerendert.

Da die Tabelle der Ereignisse im Wesentlichen ein Löschblatt ist, möchte ich, dass die Ereignisse in umgekehrter Reihenfolge ablaufen und vorzugsweise nur eine Anzahl von n Ereignissen enthalten.

Kann Backbone eine Sammlung in umgekehrter Reihenfolge "automatisch" rendern?

    
Joe 19.03.2012, 12:19
quelle

8 Antworten

11

Um in umgekehrter Reihenfolge durch die Sammlung zu gehen, verwende ich normalerweise eine Konstruktion wie diese:

%Vor%     
JuliaCesar 14.12.2012 10:35
quelle
8

Zu Ссылка

gibt es einen Thread zu diesem Thema

Obwohl Backbone die Sammlung sortiert hält, sobald Sie einen Komparator definieren, wie @breischl darauf hingewiesen hat, rendert Marionette das CollectionView nicht automatisch neu, wenn sich die Reihenfolge ändert. Tatsächlich hört Marionette auf das Ereignis add in der Sammlung und fügt ein neues ItemView hinzu.

Wenn Ihr CollectionView Elemente immer in umgekehrter chronologischer Reihenfolge anzeigen soll und Sie möchten, dass neue Elemente vorangestellt statt angehängt hinzugefügt werden, überschreiben Sie appendHtml Methode in Ihrem CollectionView wie folgt:

%Vor%

Wenn Sie in der Lage sein möchten, an einem bestimmten Ort als @dira im Kommentar erwähnt, gibt es eine Lösung auf den Link oben auf github von sberberman, die ich hier aus Bequemlichkeit reproduzieren (Disclaimer: Ich habe nicht getestet der Code unten persönlich):

Ändern Sie appendHtml zu:

%Vor%

Fügen Sie Folgendes hinzu, um jQuery so zu erweitern, dass insertAt function:

bereitgestellt wird %Vor%     
Tony Abou-Assaleh 09.05.2012 04:46
quelle
1

Normalerweise wird das Rendering in Ihrer Backbone.View 'Unterklasse' stattfinden. Du hast also etwas wie:

%Vor%

this.collection ist vermutlich eine Backbone.Collection Unterklasse, und Sie können einfach die underscore.js Methoden verwenden um es in beliebiger Reihenfolge zu bekommen:

%Vor%

usw.

Natürlich erhalten Sie ein einzelnes Element aus Ihrem Backend, und Sie möchten es an der richtigen Stelle einfügen, ohne das Ganze neu zu rendern! Gehen Sie in diesem Fall einfach in die alte Schule und fügen Sie Ihren Sortierschlüssel als rel Attribut oder data Attribut in die Elemente ein und verwenden Sie diesen in insertAfter oder ähnlich mit jQuery in Ihrer renderNewItem (oder ähnlich) Methode.

    
rfunduk 19.03.2012 13:29
quelle
1

Backbone verwaltet Sammlungen automatisch in sortierter Reihenfolge. Wenn Sie eine nicht standardmäßige Sortierung verwenden möchten, definieren Sie eine comparator() -Funktion für Ihre Sammlung, die stattdessen verwendet wird. Der Komparator kann ein oder zwei Argumente verwenden, weitere Informationen finden Sie in der Backbone-Dokumentation .

Sie können Ihre Sammlung dann in einer .each () - Schleife rendern, und sie wird in der richtigen Reihenfolge ausgegeben. Das Hinzufügen neuer Elemente zur Ansicht in sortierter Reihenfolge liegt jedoch bei Ihnen.

    
Brian Reischl 20.03.2012 00:00
quelle
1

Nach dem, was Sie beschreiben, müssen Sie die Sammlung nicht in umgekehrter Reihenfolge neu rendern. Fügen Sie einfach ein Ereignis für add in Ihrer Sammlung in dieser Ansicht hinzu und rufen Sie eine Funktion auf, die das gerade hinzugefügte Element rendert und der Tabelle voranstellt.

%Vor%     
ryanmarc 20.03.2012 05:09
quelle
0

Sie können Ihre Modelle in einer Sammlung wie folgt umkehren ...

%Vor%     
alex 10.12.2014 06:29
quelle
0

Wenn Sie lodash anstelle von Unterstrich verwenden, können Sie auch Folgendes tun:

%Vor%     
rekarnar 18.03.2015 07:23
quelle
0

Da der BackBone die umgekehrte Iteration der Sammlung nicht unterstützt (und es nur Ressourcenverschwendung ist, die Sammlung umzukehren oder schlechter zu sortieren), ist der einfachste und schnellste Ansatz die for -Schleife mit abnehmendem Index über Modelle in der Sammlung.

%Vor%

Es ist nicht so elegant, die Sammlung mit Underscore zu sortieren oder umzukehren, aber die Leistung ist viel besser. Versuchen Sie, hier verschiedene Loops zu vergleichen, nur um zu wissen, welche Kosten Sie für foreach anstelle von classic dafür bezahlen müssen.

    
Andree 23.09.2015 12:47
quelle

Tags und Links