如何防止骨干模型收集事件传播?

use*_*947 7 javascript jquery backbone.js backbone-events

如何防止Backbone Model事件传播到Backbone Collections?

编辑:

假设我有类似下面的内容,其中CollectionView包含MyModels的集合......

var CollectionView = Backbone.Collection.Extend({
    initialize: function() {
        this.collection.on("change", doStuff);
    }
});

var ModelView = Backbone.View.Extend({ 
    initialize: function() {
        this.model = new MyModel();
        this.model.on( "change", doStuff );
        this.model.fetch();
    }
});
Run Code Online (Sandbox Code Playgroud)

如果在特殊情况下我不希望"更改"事件在获取完成后传播到集合,我想知道是否有任何方法可以阻止它.

谢谢

sat*_*run 8

要防止模型触发更改事件:

model.set(attrs, {silent: true});
Run Code Online (Sandbox Code Playgroud)

但这可能不是你想要的,因为这也会阻止模型的更改事件被触发.

集合通过所有模型事件,但您可以做的是传递额外的选项,这些选项也将通过:

model.set(attrs, {dontBubble: true});
Run Code Online (Sandbox Code Playgroud)

在您的CollectionView中:

var CollectionView = Backbone.View.extend({
  this.initialize = function() {
    this.collection.on('change', doStuff, this);
  },
  this.doStuff = function(model, collection, options) {
    if (options.dontBubble) {
      return;
    }
    // Do some stuff.
  }
});
Run Code Online (Sandbox Code Playgroud)

当然,它有点难看,但这是一种方法.