0

我在我的模型中覆盖函数 parse(),当数据库中的姓名或姓氏为空时,我正在询问 Facebook API:

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;
}
});

我的问题是,在收集过程中,这些值(名字和姓氏)仍然是空的(尽管模型中的 console.log 正确显示了它)。我该如何解决?

4

1 回答 1

0

Javascript 调用是异步的,所以和FB.api之间基本上没有延迟。由于您可能在 fetch 之后立即没有返回数据,因为请求尚未结束。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 回答