Merge pull request #1041 from braddunbar/undelegate

Fix #986 - Undelegate events before changing `el`.
This commit is contained in:
Jeremy Ashkenas
2012-02-27 13:07:33 -08:00
2 changed files with 13 additions and 0 deletions

View File

@@ -1138,6 +1138,7 @@
// Change the view's element (`this.el` property), including event
// re-delegation.
setElement: function(element, delegate) {
if (this.$el) this.undelegateEvents();
this.$el = (element instanceof $) ? element : $(element);
this.el = this.$el[0];
if (delegate !== false) this.delegateEvents();

View File

@@ -186,4 +186,16 @@ $(document).ready(function() {
ok(view.$el === $el);
});
test("#986 - Undelegate before changing element.", 1, function() {
var a = $('<button></button>');
var b = $('<button></button>');
var View = Backbone.View.extend({
events: {click: function(e) { ok(view.el === e.target); }}
});
var view = new View({el: a});
view.setElement(b);
a.trigger('click');
b.trigger('click');
});
});