Backbone.jsでCollectionを初期化する方法

なんらかの条件でもってCollectionにひもづいてるModelを削除しようとしてつまった。

Collection.prototype.destroyAll = function() {
  this.each(function(model) {
    if (condition) {
      model.destroy();
    }
  }
}

これは動作しない。
Model.destroy()は自分自身を削除してしまうので、イテレーターもそこで止まってしまうわけだ。


以下のように一旦Collection.modelsの複製を作って、それをイテレートしながら削除すれば正常に動作する。

Collection.prototype.destroyAll = function() {
  var cloneModels = _.clone(this.models);
  _.each(cloneModels, function(model) {
    if (condition) {
      model.destroy();
    }
  });
}