2013-04-30 58 views
1

我有一個應用程序,在開始時需要從服務器加載用戶列表和特權組。兩個Backbone集合獲取完成時運行函數

這是我到目前爲止有:

userApp.AppRouter = new (Backbone.Router.extend 
startApp: -> 
    self = @ 

    @users = new userApp.UserCollection() 
    @users.fetch({ 
     success: (data, response) -> 
      # Need to find a way to make drawApp be called when this and the other fetch finish 
     error: (data, response) -> 
      console.log("Error fetching users") 
     }) 

    @privGroups = new userApp.GroupCollection() 
    @privGroups.fetch({ 
     success: (data, response) -> 
      self.drawApp() 
     error: (data, response) -> 
      console.log("Error fetching groups") 
      console.log(data) 
      console.log(response) 
     }) 

drawApp: -> 
    userManager = new userApp.App(@users, @privGroups) 

現在我打電話的drawApp功能,當privGroup取完因爲通常它是第二完成,但並非總是如此。我想在兩者都完成時都會調用drawApp。我認爲這將包括使用jQuery.when以某種方式重載Backbone.Sync。

任何想法都會有幫助。

回答

2

由於fetch已經返回jQuery許諾,所以您不需要覆蓋同步以使用when

fetchingUsers = @users.fetch() 
fetchingGroups = @privGroups.fetch() 

$.when(fetchingUsers, fetchingGroups).done(() -> 
    self.drawApp() 
) 

希望咖啡腳本是正確的。

+0

你小子的岩石。謝謝。 – 2013-04-30 18:00:02

1

Paul的答案是正確的。咖啡糖的好處是使用Fat Arrow將done方法綁定到外部範圍。

的CoffeeScript:

$.when(fetchingUsers, fetchingGroups).done => @drawApp 

所得的Javascript:

var _this = this; 

$.when(fetchingUsers, fetchingGroups).done(function() { 
    return _this.drawApp(); 
});