Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Из callback-функции не видны другие функции (https://javascript.ru/forum/misc/37137-iz-callback-funkcii-ne-vidny-drugie-funkcii.html)

Matisumi 09.04.2013 09:59

Из callback-функции не видны другие функции
 
Добрый день!

Вот такая проблема у меня - пишу класс, в одном из методов при получении данных от сервера вызывается функция-колбек. И вот из этой функции почему-то не видны все остальные функции класса, в консоли пишут, что <имя функции> не является функцией. В чем может быть проблема? Пробовал вызывать и через this. и просто по имени функции - бестолку..

Skipp 09.04.2013 10:01

Код в студию, что-то мне подсказывает, что там присутствуют таймеры.

tsigel 09.04.2013 10:05

Этот класс сингл тон или у него могут быть экземпляры? Этот класс в глобальной области видимости?

Matisumi 09.04.2013 10:07

this.companyTask.prototype.someFunction = function (param) {
//......
}

// тот самый колбек
this.companyTask.prototype.companyRedraw = function (text, xml) {
    if (text != '') {
        this.relOperations = dhx.DataDriver.json.toObject(text);
        
     // Вот тут хочу вызвать какую-то функцию класса, например через this
     this.someFunction ('foo bar');
    }
};

// Отправляем запрос на сервер и ждем ответ
this.companyTask.prototype.getRelOperations = function () {
   
    formData = '';
    dhx.ajax().post(URL_BASE+"/mobile/company/index/getreloperations", formData, this.companyRedraw);
};

tsigel 09.04.2013 10:11

Выведите в колбеке в консоле this и вы удивитесь увидев там не свой класс)

Обращайтесь к методу не через this

Matisumi 09.04.2013 10:11

Класс фактически синглтон, то есть за всю жизнь программы он создается всего один раз, однако средствами класса это никак не проверяется. Так что это, наверно, не синглтон в чистом виде.

Область видимости, на сколько я понимаю, глобальная

Skipp 09.04.2013 10:13

Matisumi,
Либо используйте bind, либо

this.companyTask.prototype.getRelOperations = function () {
	    var t = this;
	    formData = '';
	    dhx.ajax().post(URL_BASE+"/mobile/company/index/getreloperations", formData, function(data){t.companyRedraw(data)});
};

Matisumi 09.04.2013 10:15

Цитата:

Сообщение от tsigel (Сообщение 244967)
Выведите в колбеке в консоле this и вы удивитесь увидев там не свой класс)

Обращайтесь к методу не через this

А если не через this, пишут что is not defined.

Matisumi 09.04.2013 10:29

Всем спасибо, сделал через замыкание


Часовой пояс GMT +3, время: 17:33.