2012-10-17 33 views
5

Her bir öğeyi sırayla temizleyen bir koleksiyon boşaltmalıyım.backbone.js boş koleksiyon

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

Çalışmıyor, çünkü her düğüm kaldırıldığı için koleksiyonun uzunluğunu değiştirir. Geçici bir dizi yapma ve sonra bu çalışmaların üzerinde yineleme. Daha iyi bir yolu var mı?

cevap

4

remove etkinliğine ihtiyaç duymadıkça, this.nodes.reset() numaralı telefonu deneyin.

Aksi halde:

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

Evet, diğer düğümleri temizlediğinden, her düğümdeki kaldırma etkinliğine ihtiyacım var. – forresto

+1

@forresto, updated –

1

sonra böyle basit bir geriye for kullanarak bunu, yineleme sırasında toplama değiştirmek gerekiyorsa:

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

Fiddle http://jsfiddle.net/xt635/

+0

Bu, ters sırayla kaldırıldığında Tamam çalışır. – forresto

2

başka yolu da en omurga koleksiyonunun boşaltılması:

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