Javascript-форум (https://javascript.ru/forum/)
-   ExtJS (https://javascript.ru/forum/extjs/)
-   -   Extjs и SetTimeout (https://javascript.ru/forum/extjs/8096-extjs-i-settimeout.html)

underW 07.03.2010 23:01

Extjs и SetTimeout
 
Ext.get('id1').on('click', 
         function()
               {var a=Ext.Msg.alert("1","2");
			setTimeout('a.hide()',1000);
		                return a;});


вот есть такой кусочек кода, по логике, он должен привязывать к кнопке с id 'id1' событие click при котором показывается окошко, и которое должно исчезнуть через 1сек.

Но, получаю ошибку в вот этой строчке:

setTimeout('a.hide()',1000); - a is not defined.


Как побороть эту ошибку?

Octane 07.03.2010 23:10

setTimeout(function () {
    a.hide();
}, 1000);

underW 07.03.2010 23:20

Цитата:

В каком виде указывать первый параметр - в виде строки кода или функции - разницы нет.
цитата взята тут: http://javascript.ru/setTimeout.

Octane 07.03.2010 23:23

eval строки 'a.hide()' выполнится в глобальном контексте, а там объекта "a" нет.

(function () {

    var obj = {
        test: function () {
            alert(1);
        }
    };

    eval("obj.test()"); 

}());


function func(str) {
    eval(str);
}

(function () {

    var obj = {
        test: function () {
            alert(1);
        }
    };

    func("obj.test()"); // func вместо setTimeout

}());

underW 07.03.2010 23:40

Octane, Вы правы - спасибо большое.

P.S. аналог для SetTimeout в extjs: метод defer(). Перепишем пример, на чистом extjs:

Ext.get('id1').on('click',
                 function()
                      {var a=Ext.Msg.alert("1","2");
		
			(function(){a.hide();}).defer(1000);


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