2017-03-21 4 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!");을 사용하여 이동 이벤트를 트리거하면 두 콜백이 모두 트리거됩니다.

첫 번째 콜백에서 두 번째 콜백을 트리거하지 못하게하려면 어떻게해야합니까?

+0

AFAIK는 백본 이벤트가 작동하는 방식으로, 모든 구독자가 모든 게시 (예 : '이동')를 수신하고 취소 가능한 이벤트를 포함하지 않는 PubSub 시스템입니다. . –

답변

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

하거나 사용할 간단한 변수를 사용을 이러한 콜백의 범위