集合提取和模型解析

时间:2013-02-10 12:16:14

标签: backbone.js

我在我的模型中覆盖函数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正确显示它)。我怎么解决它?

1 个答案:

答案 0 :(得分: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以查看我正在谈论的延迟。