2013-02-10 68 views
0

我重寫功能解析()在我的模型,當名字或姓氏從數據庫是空的。我要請,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; 
} 
}); 

我的問題是,在fetch-在集合中,這個值(first_name和surname)仍然是空的(儘管模型中的console.log顯示它正確)。我怎麼解決它?

回答

0

FB.api的Javascript調用是異步的,所以在FB.apireturn self之間基本上沒有延遲。由於您的console.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回調中查看我正在談論的延遲。

+0

謝謝,我照你說的做了,觸發了模型更新的事件。 – 2013-02-10 22:15:15