Ensure #on and #off **never** alter callback list

This commit is contained in:
Justin Ridgewell
2015-05-01 20:05:28 -04:00
parent 020bec3b22
commit 9ad11ddf80
2 changed files with 5 additions and 5 deletions

View File

@@ -292,6 +292,7 @@
if (objEvents) {
var events = objEvents[name];
var allEvents = objEvents.all;
if (events && allEvents) allEvents = allEvents.slice();
if (events) triggerEvents(events, args);
if (allEvents) triggerEvents(allEvents, [name].concat(args));
}

View File

@@ -372,16 +372,15 @@
test("callback list is not altered during trigger", 2, function () {
var counter = 0, obj = _.extend({}, Backbone.Events);
var fn = function(){};
var fnOff = function(){ obj.off('event', fn); };
var incr = function(){ counter++; };
var incrOn = function(){ obj.on('event all', incr); };
var incrOff = function(){ obj.off('event all', incr); };
obj.on('event', incrOn).trigger('event');
obj.on('event all', incrOn).trigger('event');
equal(counter, 0, 'on does not alter callback list');
obj.off().on('event', fn).on('event', fnOff).on('event', incr).trigger('event');
equal(counter, 1, 'off does not alter callback list');
obj.off().on('event', incrOff).on('event all', incr).trigger('event');
equal(counter, 2, 'off does not alter callback list');
});
test("#1282 - 'all' callback list is retrieved after each event.", 1, function() {