2012-10-17 35 views
5

Tôi cần để trống một bộ sưu tập, xóa từng mục theo thứ tự.backbone.js trống một bộ sưu tập

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

Không hoạt động, vì vì mỗi nút được xóa, thay đổi độ dài của bộ sưu tập. Tạo một mảng tạm thời và sau đó lặp lại trên các công trình đó. Có cách nào tốt hơn?

Trả lời

4

Hãy thử this.nodes.reset() trừ khi bạn cần remove sự kiện.

Nếu không:

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

Vâng, tôi cần xóa sự kiện trên mỗi nút vì nó đang xóa các nội dung khác. – forresto

+1

@forresto, đã cập nhật –

1

Nếu bạn cần phải sửa đổi bộ sưu tập trong khi lặp lại, sau đó làm điều đó bằng cách sử dụng đơn giản ngược for như thế:

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

Fiddle tại http://jsfiddle.net/xt635/

+0

Công việc này khi xóa theo thứ tự ngược lại là OK. – forresto

2

Một cách khác để trống bộ sưu tập xương sống:

while (this.catz.length > 0) this.catz.pop(); 
Các vấn đề liên quan