Ответ 1
Самый простой способ сделать это - вызвать .reset()
[docs] в коллекции.
Вызов
collection.reset()
без передачи каких-либо моделей в качестве аргументов будет пустой сбор.
то есть.
collection.reset();
Я с удивлением обнаружил, что это не работает:
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
было запущено)?
Самый простой способ сделать это - вызвать .reset()
[docs] в коллекции.
Вызов
collection.reset()
без передачи каких-либо моделей в качестве аргументов будет пустой сбор.
то есть.
collection.reset();
Personnaly я use:
_.invoke(collection.toArray(), 'destroy');
который удаляет каждый элемент коллекции, вызывая метод destroy
Очевидным ответом является клонирование models
, например:
coll.remove coll.models.slice(0)
Это немного раздражает меня, но это может быть моей собственной эстетикой.