I have a backbone collection and when I remove a model from the collection, I want it to remove the item from a list in the view.
My collection is pretty basic
MyApp.Collections.CurrentEvents = Backbone.Collection.extend({ model: MyApp.Models.Event });
and in my views I have
MyApp.Views.CurrentEventItem = Backbone.View.extend({ el: 'div.current_event', initialize: function(){ event = this.model; _.bindAll(this, "remove"); MyApp.CurrentEvents.bind('remove',this.remove); //the collection holding events this.render(); }, // yeah, yeah, render stuff here remove: function(){ console.log(this); $(this.el).unbind(); $(this.el).remove(); } });
when I remove the model from the collection, it triggers the remove function, but the view is still on the page. In the console, I can see the model, but I believe the model should have an 'el', but it doesn't.
My container code is
MyApp.Views.CurrentEventsHolder = Backbone.View.extend({ el: 'div#currentHolder', initialize: function(){ MyApp.CurrentEvents = new MyApp.Collections.CurrentEvents(); MyApp.CurrentEvents.bind('new', this.add); }, add: function(){ var add_event = new MyApp.Views.CurrentEventItem(added_event); $('div#currentHolder').append(add_event.el); } });
for some reason in the add
method I can't seem to use the $(this.el)
before the append, though I'm not sure if that is the problem.
$(this.el)
from within theremove
function? The way your function is written, it should be removing all the event views whencollection.remove
happens. – Josh Leitzelthis.bind
in your initialize method? What happens if you set a breakpoint in the remove method and manually type in the$(this.el).remove()
– tkone$(this.el).remove
into a breakpoint. can you elaborate on that? – pedalpete