Как предотвратить распространение событий магистральной модели в коллекцию?


Как предотвратить распространение событий базовой модели на базовые коллекции?

Правка:

Допустим, у меня есть что-то вроде следующего, где 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();
    }
});

Если в частном случае я не хотел, чтобы событие "change" распространялось до коллекции после завершения выборки, мне интересно, есть ли способ остановить его.

Спасибо

1 7

1 ответ:

Чтобы предотвратить запуск модели событием изменения:

model.set(attrs, {silent: true});

Это может быть не то, что вы хотите, потому что это также предотвратит запуск события изменения модели.

Коллекции проходят через все события модели, но то, что вы можете сделать, это передать дополнительные опции, которые также будут проходить через:

model.set(attrs, {dontBubble: true});

И в вашем 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.
  }
});
Конечно, это немного некрасиво,но это один из способов сделать это.