Показать сообщение отдельно
  #4 (permalink)  
Старый 11.08.2011, 01:02
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

о, теперь ясно

если хотите неасинхронно, то получите тормоза интерфейса (заморозку на время скрытия), зато код будет исполняться, как у вас в последнем варианте.

если хотите плавности (скрывается за секунду и в это время можно потыкать и пошевелить мышей), то пишите код асинхронным

// ваш пример
var Dlg = function () {
	this.onClose = function () {};		
	this.show = function () {};		
	this.doClose = function () { this.onClose(1)  }
};

	var dlg = new Dlg();
        dlg.show();

var test; // тут будет строка

	dlg.onClose = function (e) {
		if (e != 0) {
			test = "error";  // строка предназначена для test
                        /*  ... тут дальше манипулируем с test ... */
		}
	}

	dlg.doClose();


а это синхронный пример

var Dlg = function () {
	this.onClose = function () {};		
	this.show = function () {};		
	this.doClose = function () {
                while( this.visible ) {
                            /* скрываем */
                            if( /*почти скрыт*/ ) break;
                }
		this.onClose(1);
	}
}
var test = function() {
	var dlg = new Dlg();
        dlg.show();
        var str;
	dlg.onClose = function (e) {
		if (e != 0) {
			str = "error";  // строка предназначена для test
		}
	}
	dlg.doClose();
        // т.к. у нас синхронность выполнения, можно написать так
        return str;
}
var result = test();


синхронность выполняет бесконечный цикл внутри doClose, который потом прервётся.

на практике асинхронный способ даст плавность и интерактивность, а синхронный замирание на время скрытия
Ответить с цитированием