1

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

这是我到目前为止所拥有的:

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

任何想法都会有所帮助。

4

2 回答 2

2

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

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

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

希望咖啡脚本是正确的。

于 2013-04-30T14:48:21.800 回答
1

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

咖啡脚本:

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

生成的 Javascript:

var _this = this;

$.when(fetchingUsers, fetchingGroups).done(function() {
  return _this.drawApp();
});
于 2013-04-30T14:58:01.820 回答