2013-02-15 11 views
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(); 
    } 
}); 

特殊なケースでは、私は「変更」イベントをしたくなかった場合フェッチが完了した後にコレクションに伝播するには、それを止める方法があるかどうか疑問に思っています。変更イベントを発射からモデルを防止するために

おかげ

+1

モデルではリセットイベントが発生しません。ご質問にお答えできますか?具体的にどのコードを実行していて、伝播したくないイベントが発生していますか? – Tomdarkness

+0

@ Tomdarknessのポイントに、あなたが示したコードはイベントバインディングです。実際にイベントをトリガしているのは何ですか? (私はこれは良い質問だと答えています。なぜなら答えはドキュメントAFAIKにはっきりしていないからです。) – Mathletics

+0

モデルがリセットイベントを起こさなかったことは知りませんでした。 – user1031947

答えて

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つの方法です。

関連する問題