2010-09-24 2 views
0

давайте предположим, что у нас есть объект, как это показано ниже:Запуск JQuery внутри метода объекта

function foo(some_var) { 
    this.some_var = some_var; 
} 

Теперь мы добавим метод с помощью прототипа:

foo.prototype.method = function(value) { 
    this.some_var += value; 
} 

Тогда мы имеем метод, с которым у меня есть некоторые проблемы:

foo.prototype.problematic = function(args) { 
    //using jQuery $.getJSON function 
    $.getJSON('http://url.com', args, function(data) { 
     for(var i in data) { 
      this.method(data[i].value); 
      // we have error in console: "this.method is not a function" 
      // this doesn't point to object foo, but to data which are returned by $.getJSON function 
     } 
    } 
} 

Как я уже упоминал в комментариях выше, в консоли Firebug имеется ошибка: «this.meth od не является функцией ". Это потому, что наше «это» не указывает на объект foo. Я не хочу, чтобы сделать что-то вроде этого:

var self = this; 

И затем, используя переменные себя вместо этого, потому что я делаю много о изменениях внутри объектных переменных.

Заранее за вашу помощь. Приветствия

ответ

0

Вы можете использовать .ajax() вместо .getJSON(), что и позволит вам указать контекст:

var self = this; // I know you don't want to use self, so let's use this as 
       // the context for the async callback 
$.ajax({ 
    context: this, 
    dataType: "json", 
    success: function(){   
     for(var i in data) { 
      this.method(data[i].value); // this == self 
     } 
}}); 
+0

спасибо, трюк с контекстом: это работает отлично –