Контекст на обратном вызове API api facebook? - PullRequest
3 голосов
/ 21 сентября 2010

Есть ли способ передать контекст в обратном вызове 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 ]

3 голосов
/ 21 сентября 2010

Затворы - ваш друг.

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 голос
/ 21 сентября 2010

Редактировать: это только часть решения.Apply () может использоваться с замыканиями для возврата функции, связанной с областью объекта (см. Сообщение Джейми).

Пример:

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

Я считаю, что вы можете изменитьконтекст, используя JavaScript применять ().Попробуйте изменить строку # 8 на callback.apply (this).

Ресурс в контексте и применить - http://kossovsky.net/index.php/2009/07/function-context-and-apply-function/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...