0

スプライトのコレクションとフレームのコレクション (各フレームにはスプライトのインスタンスがあります) があり、フレーム コレクションで使用されているスプライトをスプライト コレクションから削除したくありません。

remove イベントをリッスンすることを調べたところ、それがフレーム コレクションにあるかどうかを検出できるはずですが、例外を使用せずに、スプライトの削除を防ぐことができることを疑いました。

どのイベントを探すべきですか、それとももう少し複雑なものを探すべきですか?

4

1 に答える 1

3

メソッドのバックボーン ソース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);
    }

  });
于 2013-06-11T01:22:12.330 に答える