facebook api回调上下文?

时间:2010-09-21 14:37:14

标签: javascript oop facebook

有没有办法在javascript facebook sdk api回调中传递上下文?这是一个简单的例子。现在这不起作用,因为我的回调函数中的变量'this.name'将是未定义的,因为它不在我的用户对象上下文中。知道怎么做吗?

function user(id) {
 this.id = id;
 this.getUserName = function(fields,callback){
   FB.api({
     method:'fql.query',
     query: 'SELECT '+ fields.toString() +' FROM profile WHERE id=' + this.id
     },
     callback
   );
 }
 this.getUserName(['name'],function(response){this.name = response[0].name;});
}

var  amigo = new user('fb_id_here');

2 个答案:

答案 0 :(得分:3)

闭包是你的朋友。

function user(id) {
 this.id = id;
 this.getUserName = function(fields,callback){
   FB.api({
     method:'fql.query',
     query: 'SELECT '+ fields.toString() +' FROM profile WHERE id=' + this.id
     },
     callback
   );
 }
 this.getUserName(['name'],(function(this_user) {
   return function(response){this_user.name = response[0].name;}
 })(this));
}

var  amigo = new user('fb_id_here');

答案 1 :(得分:1)

编辑:这只是解决方案的一部分。 Apply()可以与闭包一起使用来返回绑定到对象范围的函数(参见Jamie的帖子)。

例如:

function bindScope = function(context, obj)
{
    return function()
    {
        return obj.apply(context);
    }
}

我相信你可以使用javascript的apply()来改变上下文。尝试将第8行更改为callback.apply(this)。

上下文资源&申请 - http://kossovsky.net/index.php/2009/07/function-context-and-apply-function/