Подтвердить что ты не робот

Как удалить коллекцию Backbone.js

Я с удивлением обнаружил, что это не работает:

coll = new Backbone.Collection
for i in [1..1000]
  coll.add new Backbone.Model()

console.log coll.length # 1000
coll.remove coll.models
console.log coll.length # 500!

Я понимаю, почему этот странный результат происходит, более или менее, хотя для меня это похоже на ошибку. В любом случае, какая лучшая альтернатива, не прибегая к внутренним методам вроде _reset (которая не будет работать в любом случае, поскольку я хочу, чтобы соответствующее событие remove было запущено)?

4b9b3361

Ответ 1

Самый простой способ сделать это - вызвать .reset() [docs] в коллекции.

Вызов collection.reset() без передачи каких-либо моделей в качестве аргументов будет пустой сбор.

то есть.

collection.reset();

Ответ 2

Personnaly я use:

_.invoke(collection.toArray(), 'destroy');

который удаляет каждый элемент коллекции, вызывая метод destroy

Ответ 3

Очевидным ответом является клонирование models, например:

coll.remove coll.models.slice(0)

Это немного раздражает меня, но это может быть моей собственной эстетикой.