J'ai été surpris de découvrir que cela ne fonctionne pas:
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!
Je comprends pourquoi ce résultat étrange se produit, plus ou moins, bien qu'il me semble être un bug. Quoi qu'il en soit, quelle est la meilleure alternative, sans recourir à des méthodes internes comme _reset
(qui ne fonctionnerait pas de toute façon, car je souhaite que l'événement remove
approprié soit déclenché)?
La façon la plus simple de le faire est d'appeler .reset()
[documents] sur la collection.
L'appel de
collection.reset()
sans passer de modèle comme argument videra toute la collection.
c'est à dire.
collection.reset();
Personnellement j'utilise:
_.invoke(collection.toArray(), 'destroy');
qui supprime chaque élément de la collection en appelant la méthode destroy