2012-10-17 14 views
5

Ho bisogno di svuotare una raccolta, rimuovendo ogni articolo in ordine.backbone.js svuota una raccolta

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

Non funziona, poiché ogni nodo viene rimosso modifica la lunghezza della raccolta. Creare un array temporaneo e poi iterare su quello funziona. C'è un modo migliore?

risposta

4

Prova this.nodes.reset() a meno che non sia necessario l'evento remove.

Altrimenti:

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

Sì, ho bisogno dell'evento di rimozione su ciascun nodo, poiché sta eliminando altre cose. – forresto

+1

@forresto, aggiornato –

1

Se avete bisogno di modificare la raccolta, mentre l'iterazione, poi farlo utilizzando un semplice all'indietro for così:

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

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

+0

Questo funziona quando la rimozione in ordine inverso è OK. – forresto

2

Un altro modo per vuoto della collezione backbone:

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