我有一个应用程序,一开始需要从服务器加载用户列表和权限组。
这是我到目前为止所做的:
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。
任何想法都会有所帮助。
答案 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();
});