スプライトのコレクションとフレームのコレクション (各フレームにはスプライトのインスタンスがあります) があり、フレーム コレクションで使用されているスプライトをスプライト コレクションから削除したくありません。
remove イベントをリッスンすることを調べたところ、それがフレーム コレクションにあるかどうかを検出できるはずですが、例外を使用せずに、スプライトの削除を防ぐことができることを疑いました。
どのイベントを探すべきですか、それとももう少し複雑なものを探すべきですか?
スプライトのコレクションとフレームのコレクション (各フレームにはスプライトのインスタンスがあります) があり、フレーム コレクションで使用されているスプライトをスプライト コレクションから削除したくありません。
remove イベントをリッスンすることを調べたところ、それがフレーム コレクションにあるかどうかを検出できるはずですが、例外を使用せずに、スプライトの削除を防ぐことができることを疑いました。
どのイベントを探すべきですか、それとももう少し複雑なものを探すべきですか?
メソッドのバックボーン ソースremove
:
remove: function(models, options) {
models = _.isArray(models) ? models.slice() : [models];
options || (options = {});
var i, l, index, model;
for (i = 0, l = models.length; i < l; i++) {
model = this.get(models[i]);
if (!model) continue;
delete this._byId[model.id];
delete this._byId[model.cid];
index = this.indexOf(model);
this.models.splice(index, 1);
this.length--;
if (!options.silent) {
options.index = index;
model.trigger('remove', model, this, options);
}
this._removeReference(model);
}
return this;
},
したがって、要素の削除を防ぐ「すぐに使える」方法はありません。これを実現するには、メソッドを拡張Backbone.Collection
してオーバーライドできます。remove
var SpriteCollection = Backbone.Collection.extend({
remove: function(attrs, options) {
//Some your checks
return Backbone.Collection.prototype.remove.call(this, options);
}
});