Angenommen, es gibt 2 Sammlungen, die jeweils /api/page/1
und /api/page/2
darstellen; Gibt es trotzdem (beispielsweise durch Underscore), diese 2 Sammlungen in eine neue, einzelne Sammlung zusammenzuführen?Backbone - 2 Kollektionen zusammenfügen?
Antwort
Option 1
Wenn Sie die Sammlung noch geholt haben, können Sie die erste holen, holen dann die zweite mit dem {add: true} Flagge und der zweite wird
collection.fetch({data : {page : 2});
=> [{id: 1, article : "..."}, {id: 2, article : "..."}];
collection.fetch({data : {page : 2}, add : true });
=> [{id: 1, article : "..."}, {id: 2, article : "..."}, {id: 3, article : "..."}];
Option 2
Wenn you'v: in die erste einer verschmolzen werden e geholt bereits die Sammlungen und sie in zwei Variablen gespeichert haben, können Sie einfach alle Inhalte der zweiten Sammlung in die erste hinzu:
collection1.add(collection2.toJSON());
Diese Optionen leidet unter der Tatsache, dass die erste Kollektion der „add abfeuern "Ereignis, wenn die zweite Sammlung hinzugefügt wird. Wenn diese Nebenwirkungen wie unerwünschte UI hat, die neu macht auf dieses Ereignis durch, können Sie es, indem Sie die {silent: true} unterdrücken kann Flag
collection1.add(collection2.toJSON(), {silent : true});
Option 3
Wenn Sie gerade brauchen das JSON-Format dieser Sammlungen, dfür HTML-Template-Rendering Zwecke, können Sie einfach alles zu JS Literale (Arrays, Objekte) reduzieren:
collection1.toJSON().concat(collection2.toJSON());
=> [{id: 1, article : "..."}, {id: 2, article : "..."}, ...];
Option 4 = Option 2 + 3
Wenn Sie schon geholt bereits beide Sammlungen, Sie kann JS Literale reduzieren und alles zu einer frischen Backbone Sammlung
var rawCollection = collection1.toJSON().concat(collection2.toJSON());
var newCollection = new Backbone.Collection(rawCollection);
Es scheint mir, dass Sie dabei die Semantik verlieren, die an /api/page/{1, 2}/
gebunden ist.
Es scheint mir auch, dass weder Rückgrat, noch unterstreichen, bietet Ihnen eine Funktion/Methode genau das, was Sie tun wollen.
So Ihre Optionen:
- eine neue Sammlung erstellen, jedes Element aus der vorherigen Sammlungen hinzufügen;
- hinzufügen erstes Kollektion Elemente in dem zweiten
Aber Sie wahrscheinlich schon kannten.
Ja. Ich denke, die Lösung hier ist 1 Sammlung zu haben und Sie holen ({data: {page: 1}, add: true}) '. Erhöhen Sie den Seitenwert mit jedem 'fetch()' und fügen Sie den neuesten Stapel/die neueste Seite der Modelle in die Sammlung ein. – jmk2142
Ihre Lösung scheint ziemlich hübsch, aber ich denke, er hat bereits die Sammlungen abgerufen, und möchte wahrscheinlich vermeiden, die Daten erneut zu übertragen. Aber wenn es der Fall ist, dann ist dein Weg ein guter Weg. – ksol
collection.add(models, [options])
Collection Array von Modellen
collection.models
kehrt Array von Modellen
ein Modell hinzufügen (oder eine Reihe von Modellen) zu der Sammlung.
A = Backbone.Collection;
collection1 = new A([
{key, 'value'}, //model1
{key : value1} //model2 in collection1
]);
B = Backbone.Collection;
collection2 = new B([
{key1, 'value'}, //model1
{key1 : value1} //model2 in collection2
]);
collection1.add(collection2.models); //now, collection1 has four models..
Collection.models bietet direkten Zugriff auf das Array von moels und Collection.add wird eine Reihe von Modellen als Argument nehmen.
Verwendung
collection.models
von
insted diesecollection.toJSON()
versuchen, ist Sammlung Reihe von Modellen
collection1.add(collection2.models);
wenn wir verwenden
collection1.add(collection2.toJSON());
dann Referenz chage
+1 Das ist die einzige echte Antwort, sollte wirklich die akzeptierte sein. Siehe Dokumentation: http://backbonejs.org/#Collection-add. Sie können auch entscheiden, ob Sie Duplikate akzeptieren oder nicht, indem Sie Folgendes übergeben: {merge: true} –
- 1. 2 Zweige in GIT zusammenfügen
- 2. Codeigniter Tabellen aus 2 Datenbanken zusammenfügen
- 3. Kernbibliotheken zusammenfügen
- 4. Wie verwende ich den gleichen Foreach Code für 2 Kollektionen?
- 5. Vergleich von 2 gleichen Backbone-Modellen (d. H.) 2 verschiedenen Instanzen eines Backbone-Modells
- 6. Invertierte verschachtelte Kollektionen in LINQ
- 7. Generisch erweiternden Scala Kollektionen
- 8. Kollektionen in Adobe Flex
- 9. Generics Kollektionen PECS
- 10. scala Kollektionen String
- 11. Laravel Kollektionen - Ergebnisse bestellen
- 12. Ruby-Skripts zusammenfügen
- 13. Listen in einer Liste zusammenfügen?
- 14. Zwei Bilder zusammenfügen
- 15. Mehrere Wörterbücher bedingt zusammenfügen
- 16. Mehrere Bilder zusammenfügen matplotlib
- 17. Linienstränge in MATLAB-Legende zusammenfügen
- 18. Karte zusammenfügen und Wert ändern
- 19. Jede Kreuzung in zwei Kollektionen
- 20. Java: über Kollektionen ReverseComparator Implementierung
- 21. Guava Kollektionen: limit Permutation Größe
- 22. Datum gefiltert Kollektionen ohne Funktionen
- 23. Zusammenfügen von zwei HTML-Skripten
- 24. LEFT OUTER JOIN von zwei Kollektionen
- 25. SQL Zusammenfügen der gleichen Tabellen
- 26. Ordnerstruktur kopieren und Unterverzeichnisse zusammenfügen
- 27. Backbone Sammlung/Modell Best Practice
- 28. Mehrere Join-Datensätze zu einer ID zusammenfügen
- 29. Grails MongoDB Plugin: Embedded Kollektionen vs Referenzen
- 30. Wie testet man generische Kollektionen in Nunit?
Danke für die gründliche Erklärung =) – Kay
-1. Wenn Sie jSON() aufrufen, verlieren Sie den Bezug zu den Modellen. Wenn Sie ein Modell erstellen, es in eine Sammlung einfügen, die Sammlung mit einer anderen zusammenführen, das Modell ändern, wird das Modell in der letzten Sammlung nicht aktualisiert. Dies wird ein Albtraum für das Debuggen. Es wäre in Ordnung, wenn Sie die Modelle kopieren und getrennt halten möchten, aber das ist nicht die Norm und sollte darauf hingewiesen werden. –
Wenn Sie bereits die beiden Sammlungen haben, sollten Sie wahrscheinlich eine der folgenden Antworten verwenden: 'collection1.add (collection2.models);' –