Search code examples
javascriptjqueryeventsbackbone.jseventtrigger

Stop event propagation applying on same event object in backbone


I have applied same custom event to the event object in the backbone with 2 different callbacks.

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

When I trigger move event using ourObject.trigger("move", "Yeah!");,it will trigger both the callbacks.

How should I prevent triggering second callback from first callback?


Solution

  • You can pass an object containing a flag which acts as an event object as second argument:

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

    Or you can simply do something like:

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

    Or just use simple variable available in the scope of these callbacks