2013-05-25 7 views
6

Ich habe Probleme, wenn ich versuche, die Reihenfolge von Objekten in einer Sammlung zufällig zu bestimmen.Backbone.js Wie mische ich Objekte innerhalb einer Sammlung?

Hier ist der Code, den ich versucht habe:

console.log(this.collection); 
shuffled = this.collection.shuffle(); 
console.log(shuffled); 

Und hier ist die Ausgabe der Konsole (eine Testsammlung mit 3 Artikel verwenden):

child {models: Array[3], length: 3, _byId: Object, url: "/myurl/myid", _listenerId: "l7"…} 
_byId: Object 
_events: Object 
_idAttr: "id" 
_listenerId: "l7" 
length: 3 
models: Array[3] 
__proto__: Surrogate 

[child, child, child] 
0: child 
1: child 
2: child 
length: 3 
__proto__: Array[0] 

Wie Sie sehen können, die Collection Es wird nicht richtig gemischt, sondern es wird ein neues, unbrauchbares Objekt voller ärgerlicher Kinder erstellt.

Alles was ich versuche zu tun ist randomize die Reihenfolge, in der die Modelle in der Sammlung erscheinen, bevor Sie es in eine Ansicht zur Anzeige übergeben (Ich erstelle eine Schaltfläche namens "randomize", die die Anzeige der Artikel in der Sammlung). Ich dachte, das wäre eine leichte Aufgabe, aber an diesem Punkt denke ich darüber nach, ein ganz neues Modell zu erstellen und den Shuffle auf dem Server durchzuführen.

Jede Hilfe wird sehr geschätzt!

+0

Wenn Sie die Ansicht randomisieren möchten, warum legen Sie den Code in die Sammlung und nicht die Ansicht? –

+0

Der Code ist in einer Ansicht gekapselt, ich zeigte nur die entsprechenden Teile oben. Die Sammlung wird randomisiert, dann wird die Ansicht basierend auf der zufälligen Sammlung aktualisiert und ebenfalls gespeichert. – mgee245

Antwort

8
console.log(this.collection); 
this.collection.reset(this.collection.shuffle(), {silent:true}); 
console.log(this.collection); 
+0

Perfekt! Das hat den Trick gemacht ... Ich werde mir jetzt die .reset-Funktion ansehen. Danke vielmals! – mgee245

+0

Das ist großartig. Das wäre das Standardverhalten von Backbones Implementierung von _.shuffle – SimplGy

Verwandte Themen