0

モデルの関数parse()をオーバーライドします。データベースの名前または名前が空の場合、FacebookAPIに次のように要求します。

var Friend = Backbone.Model.extend({ 
parse : function(response) {
    var self = response,
        that = this;

    if(!response.first_name) {
        FB.api('/'+response.fbid, function(response) { 
            self.first_name = response.first_name;
            self.surname = response.last_name;
        });
    }

    return self;
}
});

私の問題は、コレクションのフェッチ中にこの値(first_nameとsurname)がまだ空であるということです(モデルのconsole.logはそれを正しく示していますが)。どうすれば解決できますか?

4

1 に答える 1

0

へのJavascript呼び出しは非同期であるため、基本的にとの間にFB.apiは遅延はありません。おそらくフェッチの直後なので、リクエストが終了していないため、から返されるデータはありません。FB.apireturn selfconsole.log(model)FB.api

あなたができることは、モデルが更新されたときにコールバックを入れてそれをリッスンするように設定することです。モデルのトリガーupdateメソッドを変更すると...

Friend.fetch( { success: function(model, response) { 
    if ( !model.get('first_name') ) {
        FB.api('/'+model.get('fbid'), function(fb_response) {
            model.set('first_name', fb_response.first_name);
            model.set('last_name', fb_response.last_name);
            console.log('model updated with facbook info', model);
        });
    }
}});

コールバックで(現在のコードで)実行してconsole.log('updated');FB.api私が話している遅延を確認してください。

于 2013-02-10T13:21:21.540 に答える