7

バックボーンモデルイベントがバックボーンコレクションに伝播しないようにするにはどうすればよいですか?

編集:

次のようなものがあり、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();
    }
});

特別な場合に、フェッチの完了後に「変更」イベントをコレクションまで伝播させたくない場合は、それを停止する方法があるかどうか疑問に思います。

ありがとう

4

1 に答える 1

8

モデルが変更イベントを発生させないようにするには:

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.
  }
});

確かに、それは少し醜いですが、それはそれを回避するための1つの方法です。

于 2013-02-15T19:25:19.287 に答える