我在我的模型中覆盖函数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;
}
});
我的问题是,在集合中获取时,这个值(first_name和surname)仍然是空的(尽管模型中的console.log正确显示它)。我怎么解决它?
答案 0 :(得分:0)
对FB.api
的Javascript调用是异步的,因此基本上FB.api
和return 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
以查看我正在谈论的延迟。