你如何在backbone.js中停止删除

时间:2013-06-10 23:15:48

标签: backbone.js backbone-events

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

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

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

1 个答案:

答案 0 :(得分: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);
    }

  });