2017-03-21 9 views
0

2つの異なるコールバックを使用して、同じカスタムイベントをバックボーンのイベントオブジェクトに適用しました。バックボーン内の同じイベントオブジェクトに適用するイベントの伝播を停止する

var ourObject = {}; 

_.extend(ourObject, Backbone.Events); 
function dancing (msg) { console.log("We are dancing. " + msg); } 
function jumping (msg) { console.log("We are jumping. " + msg); } 
ourObject.on("move", dancing); 
ourObject.on("move", jumping); 

ourObject.trigger("move", "Yeah!");を使用して移動イベントをトリガーすると、両方のコールバックがトリガーされます。

最初のコールバックから2番目のコールバックがトリガーされないようにするにはどうすればよいですか?

+0

AFAIKは、バックボーンイベントの仕組みであり、すべてのサブスクライバがすべてのパブリケーション(「移動」など)を受信し、取り消し可能なイベントを含まないPubSubシステムです。 –

答えて

2

あなたは2番目の引数としてイベントオブジェクトとして機能フラグを含むオブジェクトを渡すことができます:

function dancing(msg, event) { 
    console.log(event); // flag: false 
    event.flag = true; 
    console.log("We are dancing. " + msg); 
} 

function jumping(msg, event) { 
    console.log(event); // flag: true 
    if(!event.flag) return; 
    console.log("We are jumping. " + msg); 
} 

ourObject.trigger("move", 'test', { 
    flag: false 
}); 

それとも、単にような何かすることができます

function dancing (msg) { 
    this.dancingTriggered = true; 
    console.log("We are dancing. " + msg); 
} 
function jumping (msg) { 
if(this.dancingTriggered){ 
    this.dancingTriggered = false; 
    return; 
} 
console.log("We are jumping. " + msg); 
} 

それとも可能な単純な変数を使用しますこれらのコールバックの範囲内

関連する問題