Merge pull request #1714 from RStankov/view-dispose-can-work-with-normal-objects

Check if model/collection support .off when disposing of the view
This commit is contained in:
Jeremy Ashkenas
2012-10-05 12:12:39 -07:00
2 changed files with 10 additions and 5 deletions

View File

@@ -1234,8 +1234,8 @@
// memory leaks.
dispose: function() {
this.undelegateEvents();
if (this.model) this.model.off(null, null, this);
if (this.collection) this.collection.off(null, null, this);
if (this.model && this.model.off) this.model.off(null, null, this);
if (this.collection && this.collection.off) this.collection.off(null, null, this);
return this;
},

View File

@@ -286,11 +286,11 @@ $(document).ready(function() {
test("dispose", 0, function() {
var View = Backbone.View.extend({
events: {
click: function() { ok(false); }
click: function() { fail(); }
},
initialize: function() {
this.model.on('all x', function(){ ok(false); }, this);
this.collection.on('all x', function(){ ok(false); }, this);
this.model.on('all x', function(){ fail(); }, this);
this.collection.on('all x', function(){ fail(); }, this);
}
});
@@ -305,6 +305,11 @@ $(document).ready(function() {
view.$el.click();
});
test("dispose with non Backbone objects", 0, function() {
var view = new Backbone.View({model: {}, collection: {}});
view.dispose();
});
test("view#remove calls dispose.", 1, function() {
var view = new Backbone.View();