view events can now be a function that returns an events object

This commit is contained in:
Zack Owens
2012-01-07 10:17:57 -05:00
parent 1c158747a0
commit b081fe87a5
2 changed files with 23 additions and 5 deletions

View File

@@ -940,6 +940,7 @@
// not `change`, `submit`, and `reset` in Internet Explorer.
delegateEvents : function(events) {
if (!(events || (events = getValue(this, 'events')))) return;
if (_.isFunction(events)) events = _.bind(events, this)();
this.undelegateEvents();
for (var key in events) {
var method = events[key];

View File

@@ -57,17 +57,34 @@ $(document).ready(function() {
});
test("View: delegateEvents allows functions for callbacks", function() {
var counter = 0;
view.counter = 0;
view.el = "#qunit-banner";
var events = {"click": function() { counter++; }};
var events = {"click": function() { this.counter++; }};
view.delegateEvents(events);
$('#qunit-banner').trigger('click');
equals(counter, 1);
equals(view.counter, 1);
$('#qunit-banner').trigger('click');
equals(counter, 2);
equals(view.counter, 2);
view.delegateEvents(events);
$('#qunit-banner').trigger('click');
equals(counter, 3);
equals(view.counter, 3);
});
test("View: delegateEvents allows function as events arg", function() {
view.counter = 0;
view.el = "#qunit-banner";
var events = function () {
return {"click": this.click};
};
view.click = function() { this.counter++; };
view.delegateEvents(events);
$('#qunit-banner').trigger('click');
equals(view.counter, 1);
$('#qunit-banner').trigger('click');
equals(view.counter, 2);
view.delegateEvents(events);
$('#qunit-banner').trigger('click');
equals(view.counter, 3);
});
test("View: undelegateEvents", function() {