The View.remove() function in backbone js removes the container element of the view itself from the DOM preventing from recreating views that have been removed. Any idea how this scenario is handled
Here is my code,
var AttributeView = Backbone.View.extend({
el: $("#attrs"),
template:_.template($('#attrs-template').html()),
initialize:function() {
},
render:function (eventName) {
$(this.el).html(this.template(this.model.toJSON()));
return this;
},
dispose:function(eventName){
this.unbind();
this.remove();
},
});
var attrView = new AttributeView();
....
attrView.dispose();
//Later on some event I do the below
attrView = new AttributeView()
attrView.render();
The last two lines above do not recreate the view as the div with id=”attrs” is not longer there.
First of all, you don’t need your
disposemethod, the standardremoveis sufficient:Secondly, you can override
removeif the standard version doesn’t do what you need. The default implementation simply removesthis.eland cleans up some event listeners:In your case, you want to undo everything that
renderdoes and that means clearing out the HTML insidethis.eland removing the events by callingundelegateEvents:Then you can call
attrView.remove()and kill it off and(new AttributeView()).render()to bring it back.Demo: http://jsfiddle.net/ambiguous/Pu9a2/3/