I'm working on a chat client, and I've come across an issue with Backbone's event system.
When the client starts, I render the view as so:
var view = new ServerListView({collection: Chatter.servers});
Chatter.Views.servers = view;
$('#channels > ul').html(view.render().el);
Works fine, events are called. Speaking of events those are:
events: {
"click .server": "server",
"click .server ul li": "channel",
"click .server .slider": "slide"
},
The render method in question:
render: function(){
var self = this;
this.$el.html("");
this.collection.each(function(server){
self.$el.append(self.template(server.toJSON()));
var header = self.$el.find('li.server[data-id="' + server.id + '"]')
var connection = Chatter.Connections[server.id];
if (connection) {
if (connection.channels.length > 0) {
connection.channels.each(function(channel) {
$(header).find("ul").append("<li data-channel-id=\"" + channel.id + "\">" + channel.get('name') + "</li>");
}, self);
}
}
}, self);
this.delegateEvents();
return self;
},
Everytime this is called, it should re-render the view with all the Servers and Channels correctly. Everything renders correctly, but the events are not being called.
I re-render it the same way I render it:
$('#channels > ul').html(Chatter.Views.servers.render().el);
For whatever reason the above events are not being called when rendering it, any ideas?
Thanks
EDIT: I forgot to mention something:
If I re-render it with:
var view = Chatter.Views.servers;
$('#channels > ul').html(view.render().el);
view.delegateEvents();
Then it works just fine, which I know that would be okay, but I'm 99% sure I shouldn't have to do that, and I don't want to have to do that for every time that I re render the view.
Thanks again.