2012-10-17 14 views
5

Potrzebuję opróżnić kolekcję, usuwając każdy przedmiot w kolejności.backbone.js pusty kolekcja

this.nodes.each(function(node){ 
    this.nodes.remove(node); 
}, this); 

Nie działa, ponieważ po usunięciu każdego węzła zmienia długość kolekcji. Tworzenie tymczasowej tablicy, a następnie jej powtarzanie. Czy istnieje lepszy sposób?

Odpowiedz

4

Wypróbuj this.nodes.reset(), chyba że potrzebujesz zdarzenia remove.

Inaczej:

var nodes = this.nodes; 
while (nodes.length > 0) 
    nodes.remove(nodes.at(0)); 
+0

Tak, potrzebuję zdarzenie remove na każdym węźle, ponieważ usuwa inne rzeczy. – forresto

+1

@forresto, zaktualizowano –

1

Jeśli trzeba zmodyfikować kolekcji podczas iteracji, następnie zrób to za pomocą prostego wsteczną for takiego:

var count = collection.size(); 
for (var i = count-1; i > -1; i--) { 
    collection.remove(collection.at(i)); 
} 

Fiddle w http://jsfiddle.net/xt635/

+0

Działa to, gdy usuwanie w odwrotnej kolejności jest OK. – forresto

2

Innym sposobem pusty zbiór kręgosłupa:

while (this.catz.length > 0) this.catz.pop();