Just so you can appreciate what JQuery Deferred is getting rid of, this is an example of how you could solve this very common problem without it. (Imagine the same code for 4 collections / models, not just 2.)
initialize: function(model, options) { team.fetch(); goal.fetch(); this.listenTo(team, 'sync', this.teamFetched); this.listenTo(goal, 'sync', this.goalFetched); }, teamFetched: function() { this._teamFetched = true; // if goal also fetched, call & return this.render() return (( this._goalFetched ) ? this.render() : this); }, goalFetched: function() { this._goalFetched = true; // if team also fetched, call & return this.render() return (( this._teamFetched ) ? this.render() : this); } render: function() { this._goalFetched = this._teamFetched = false; this.$el.html(template()); return this; }
source share