两个Backbone集合获取完成后运行函数

时间:2013-04-30 14:04:19

标签: jquery backbone.js

我有一个应用程序,一开始需要从服务器加载用户列表和权限组。

这是我到目前为止所做的:

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)

现在我只是在privGroup完成提取时调用drawApp函数,因为通常它是第二次完成,但并非总是如此。我希望两者都完成后,它会调用drawApp。我认为这将包括以某种方式使用Backbone.Sync来使用jQuery.when

任何想法都会有所帮助。

2 个答案:

答案 0 :(得分:2)

您不需要覆盖同步以使用when,因为fetch已经返回了jQuery的承诺。

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

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

希望咖啡脚本是正确的。

答案 1 :(得分:1)

保罗的回答是正确的。一点点咖啡糖就是使用Fat Arrow将done方法绑定到外部范围。

CoffeeScript的:

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

结果Javascript:

var _this = this;

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