Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 21.01.2011, 11:45
Кандидат Javascript-наук
Отправить личное сообщение для Jurasmi Посмотреть профиль Найти все сообщения от Jurasmi
 
Регистрация: 25.11.2008
Сообщений: 115

Цепочка вызовов с таймаутом.
Господа, можно ли сделать вот такую красивость:
formObj.config(par).show();

Эта штука настраивает форму и показывает её на страничке. Хитрость в том, что при "настройке" (config()) объект формы (formObj) лезет на сервер и заполняет эту самую форму. Так вот, надо "проявлять" форму только после того, как форма будет заполнена (т.е. не сразу).
Я попытался сделать вот так (не получилось):
form.config(id).show();
form = {
	config: function(par){
		//тут форма заполняеться (с привлечением AJAX)		
		setTimeout('return this', 2000);	//сейчас это "задержка", но можно сделать и callback от AJAX
	}
	show: function(){...}	//проявляет форму
	...
}

Как делаються подобные вещи "по-человечески", если делаються, конечно?
Ответить с цитированием
  #2 (permalink)  
Старый 21.01.2011, 12:36
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

Сделать, конечно, можно (есть ли смысл заморачиваться - вопрос отдельный). Например, можно складывать вызовы в стек и звать "по готовности":
<div id="toLog"></div>
<script type="text/javascript">
var Constructor = function(){
  var stack = [];
  
  this.add = function(str){
    stack.push(str);
    if(stack.length === 1){
      document.getElementById('toLog').innerHTML += stack[0];
      setTimeout(function(){
        stack.shift();
        if(stack.length === 0) return;
        document.getElementById('toLog').innerHTML += stack[0];
        setTimeout(arguments.callee, 500);
      }, 500);
    };
    return this;
  };
};

var inst = new Constructor();
inst.add('Tra').add(' - la').add(' - la!!!');
</script>
Ответить с цитированием
  #3 (permalink)  
Старый 21.01.2011, 12:54
Кандидат Javascript-наук
Отправить личное сообщение для Jurasmi Посмотреть профиль Найти все сообщения от Jurasmi
 
Регистрация: 25.11.2008
Сообщений: 115

Наворотил; хотя и не блеск, но работает:
form.config(id).show();

form = {
	editId: null,
	
	config: function(id){
		this.editId = id;
		return this;
	},
	
	//фиктивный метод, он выставлен наружу
	//на самом деле форма "проявляеться" методом "showInner"
	show: function(){
		this.fill(this.editId, this.showInner);
	},	

	fill: function(id, fn){
		//тут АЯКС и всё такое
		fn();	//вызываеться внутри колбека из АЯКСА
	},
	
	showInner: function(){...}
}

Последний раз редактировалось Jurasmi, 24.01.2011 в 10:38.
Ответить с цитированием
  #4 (permalink)  
Старый 21.01.2011, 12:59
Кандидат Javascript-наук
Отправить личное сообщение для Jurasmi Посмотреть профиль Найти все сообщения от Jurasmi
 
Регистрация: 25.11.2008
Сообщений: 115

@Sweet: спасибо огромное, не знал я такого способа!
у-у-у, хитрое решение...

Последний раз редактировалось Jurasmi, 21.01.2011 в 13:20.
Ответить с цитированием
  #5 (permalink)  
Старый 22.01.2011, 12:28
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

Сообщение от Sweet
есть ли смысл заморачиваться - вопрос отдельный
отнюдь, есть смысл не заморачиваться: о разметке знают и клиент и сервер + unobtrusive javascript
Ответить с цитированием
  #6 (permalink)  
Старый 24.01.2011, 10:41
Кандидат Javascript-наук
Отправить личное сообщение для Jurasmi Посмотреть профиль Найти все сообщения от Jurasmi
 
Регистрация: 25.11.2008
Сообщений: 115

Цитата:
о разметке знают и клиент и сервер + unobtrusive javascript
что-то я ничего не понимаю
Что знает о разметке сервер?
Что вы хотели вообще сказать вашей фразой я не понял - очень сложно.
Ответить с цитированием
  #7 (permalink)  
Старый 24.01.2011, 12:27
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

я хотел сказать, что не надо отправлять html в ajax-запросы, что надо делать "по-человечески"
Ответить с цитированием
  #8 (permalink)  
Старый 24.01.2011, 12:33
Кандидат Javascript-наук
Отправить личное сообщение для Jurasmi Посмотреть профиль Найти все сообщения от Jurasmi
 
Регистрация: 25.11.2008
Сообщений: 115

Цитата:
я хотел сказать, что не надо отправлять html в ajax-запросы
согласен, не надо. Я и не отправляю - если это камень в мой огород.
А, кажется я понял: "form" это не имя формы из DOM, это я так (неудачно?) назвал JS-объект (он просто отражает саму форму со странички).
Ответить с цитированием
  #9 (permalink)  
Старый 24.01.2011, 13:47
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

просто если ты подробнее расскажешь, чего ты пытаешься добиться, можно попытаться найти решение получше
Ответить с цитированием
  #10 (permalink)  
Старый 24.01.2011, 14:46
Кандидат Javascript-наук
Отправить личное сообщение для Jurasmi Посмотреть профиль Найти все сообщения от Jurasmi
 
Регистрация: 25.11.2008
Сообщений: 115

У меня была конкретная задача - сделать заполнение формы на сайте. Т.е. я жму кнопочку, на сервер лезет запрос, возвращает данные, которые подставляються в HTML-форму и у же только потом эта форма появляеться на страничке (заполненная как надо).
Но спрашивал я не про это, мне хотелось знать, более абстрактно, как делаються "цепочки вызовов" с "отсрочкой" - вот об этом я и спросил.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Цепочка функций sartas Общие вопросы Javascript 12 18.03.2011 21:33
Как отлаживать события? Или как сделать трассировку вызовов функций? gennad Events/DOM/Window 1 18.08.2010 13:21
Цепочки вызовов Vladimir[gs] Общие вопросы Javascript 32 17.03.2010 12:29