0

我有精灵集合和帧集合(每个帧中都有一个精灵的实例),如果它在帧集合中使用,我不想从精灵集合中删除它。

我已经研究过监听删除事件并且应该能够检测它是否在帧集合中,但是没有使用异常怀疑我可以阻止精灵的删除。

我应该寻找什么事件,或者我应该寻找更复杂的东西?

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 回答