Запуск jQuery внутри метода объекта - PullRequest
0 голосов
/ 24 сентября 2010

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

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.method не является функцией».Это потому, что наше «this» не указывает на объект foo.Я не хочу делать что-то вроде этого:

var self = this;

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

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

1 Ответ

0 голосов
/ 24 сентября 2010

Вы можете использовать .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
        }
}});
...