これが機能しないことを知って驚いた:
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();
個人的に私は使用します:
_.invoke(collection.toArray(), 'destroy');
destroyメソッドを呼び出して、コレクションのすべての要素を削除します