Do not alter the "on" events array

This commit is contained in:
Justin Ridgewell
2015-01-24 14:44:17 -05:00
parent 7315c56d2e
commit c48cf5f22e
2 changed files with 7 additions and 9 deletions

View File

@@ -83,8 +83,8 @@
on: function(name, callback, context) {
if (!eventsApi(this, 'on', name, [callback, context]) || !callback) return this;
this._events || (this._events = {});
var events = this._events[name] || (this._events[name] = []);
events.push({callback: callback, context: context, ctx: context || this});
var events = this._events[name] || [];
this._events[name] = events.concat({callback: callback, context: context, ctx: context || this});
return this;
},

View File

@@ -341,14 +341,12 @@
test("callback list is not altered during trigger", 2, function () {
var counter = 0, obj = _.extend({}, Backbone.Events);
var incr = function(){ counter++; };
obj.on('event', function(){ obj.on('event', incr).on('all', incr); })
.trigger('event');
var incrOn = function(){ obj.on('event', incr).on('all', incr); };
var incrOff = function(){ obj.off('event', incr).off('all', incr); };
obj.on('all', incrOn).on('event', incrOn).trigger('event');
equal(counter, 0, 'bind does not alter callback list');
obj.off()
.on('event', function(){ obj.off('event', incr).off('all', incr); })
.on('event', incr)
.on('all', incr)
.trigger('event');
obj.off().on('all', incrOff).on('event', incrOff)
.on('event', incr).on('all', incr).trigger('event');
equal(counter, 2, 'unbind does not alter callback list');
});