First, I'd avoid calling your view's render method from inside the model. Second, are you sure you want a new albumview for each song? It seems like your albumview, which maintains a reference to your album collection, just needs a songview, or some other such construct:
var AlbumView = Backbone.View.extend({
initialize: function () {
this.listenTo(this.collection, 'reset', this.render);
this.listenTo(this.collection, 'add', this.addOne);
},
render: function () {
this.addAll();
return this;
},
addAll: function () {
this.$el.empty();
this.collection.each(this.addOne, this);
},
addOne: function (song) {
var songView = new SongView({ model: song });
this.$el.append(songView.render().el);
}
});
var SongView = Backbone.View.extend({
render: function () {
// whatever you would do for just one song
}
});
This is a common pattern for rendering a collection (album) view and an item (song) view.