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 関数を呼び出しているだけです。通常は 2 番目に行われるためですが、常にではありません。両方が終了したら、drawApp を呼び出します。これには、何らかの方法で Backbone.Sync をオーバーライドしてjQuery.whenを使用することが含まれると考えています。

どんな考えでも役に立ちます。

4

2 に答える 2

2

whenfetch はすでに jQuery promise を返しているため、sync をオーバーライドして使用する必要はありません。

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 に答える