Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Prototype. Ajax.Request и this. Вытащить переменную из области видимости 
V
    Опции темы
SamDark
  Дата 23.6.2007, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый кот
***


Профиль
Группа: Участник
Сообщений: 1424
Регистрация: 25.7.2006
Где: Voronezh

Репутация: нет
Всего: 38



Есть вот такой код:

Код

MyObj = function(){
  this.items = new Array();
}

MyObj.prototype.process = function(id){
    new Ajax.Request('/loader?id='+id, {
        method: 'get',
        onSuccess:function(resp) {
            eval("var items = " + resp.responseText + ";");
                                    // естественно, не работает, а хочется...
            this.items = items;
        },
        onFailure:function(resp){alert(resp.responseText);}
    });    
}


Надо как-то вытащить переменную items из области видимости Ajax.Request. Как это сделать?



--------------------
rmcreative.ru — Это жжж неспроста...
yiiframework.ru — О фреймворке Yii на русском.
reggi — здесь я регистрирую домены
PM MAIL WWW GTalk Jabber MSN   Вверх
Alx
Дата 23.6.2007, 14:36 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

Репутация: 6
Всего: 78



SamDark

Код

MyObj = function(){
  this.items = new Array();
}

MyObj.prototype.process = function(id){
    var t = this; // обозначаем через внутреннюю переменную
    new Ajax.Request('/loader?id='+id, {
        method: 'get',
        onSuccess:function(resp) {
            var items = eval(resp.responseText);
                                    // конечно, this уже ссылается на функцию onSuccess...
            t.items = items;
        },
        onFailure:function(resp){alert(resp.responseText);}
    });    
}



--------------------
PM MAIL WWW ICQ   Вверх
SamDark
Дата 23.6.2007, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый кот
***


Профиль
Группа: Участник
Сообщений: 1424
Регистрация: 25.7.2006
Где: Voronezh

Репутация: нет
Всего: 38



Alx
Спасибо.


--------------------
rmcreative.ru — Это жжж неспроста...
yiiframework.ru — О фреймворке Yii на русском.
reggi — здесь я регистрирую домены
PM MAIL WWW GTalk Jabber MSN   Вверх
Avb
Дата 25.6.2007, 12:46 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 5.7.2006

Репутация: 5
Всего: 13



Для того чтобы внутри функции указатель this ссылался на нужный объект в prototype.js существуют методы bind() и bindAsEventListener(). Последний еще и передает первым параметром объект event.
Код

MyObj = function(){
  this.items = new Array();
}

MyObj.prototype.process = function(id){
    new Ajax.Request('/loader?id='+id, {
        method: 'get',
        onSuccess:function(resp) {
            eval("var items = " + resp.responseText + ";");
                                    
            this.items = items;
        }.bind(this),  // здесь this указывает на MyObj. 
                             // С помощью bind() this внутри onSuccess также будет ссылаться на MyObj
        onFailure:function(resp){alert(resp.responseText);}
    });    

}

PM MAIL   Вверх
SamDark
Дата 25.6.2007, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый кот
***


Профиль
Группа: Участник
Сообщений: 1424
Регистрация: 25.7.2006
Где: Voronezh

Репутация: нет
Всего: 38



Avb
Спасибо, учту.


--------------------
rmcreative.ru — Это жжж неспроста...
yiiframework.ru — О фреймворке Yii на русском.
reggi — здесь я регистрирую домены
PM MAIL WWW GTalk Jabber MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Применение библиотек | Следующая тема »


 




[ Время генерации скрипта: 0.0897 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.