Цепочка вызовов с таймаутом.
Господа, можно ли сделать вот такую красивость:
formObj.config(par).show(); Эта штука настраивает форму и показывает её на страничке. Хитрость в том, что при "настройке" (config()) объект формы (formObj) лезет на сервер и заполняет эту самую форму. Так вот, надо "проявлять" форму только после того, как форма будет заполнена (т.е. не сразу). Я попытался сделать вот так (не получилось): form.config(id).show(); form = { config: function(par){ //тут форма заполняеться (с привлечением AJAX) setTimeout('return this', 2000); //сейчас это "задержка", но можно сделать и callback от AJAX } show: function(){...} //проявляет форму ... } Как делаються подобные вещи "по-человечески", если делаються, конечно? |
Сделать, конечно, можно (есть ли смысл заморачиваться - вопрос отдельный). Например, можно складывать вызовы в стек и звать "по готовности":
<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> |
Наворотил; хотя и не блеск, но работает:
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(){...} } |
@Sweet: спасибо огромное, не знал я такого способа!
у-у-у, хитрое решение... |
Цитата:
|
Цитата:
Что знает о разметке сервер? Что вы хотели вообще сказать вашей фразой я не понял - очень сложно. |
я хотел сказать, что не надо отправлять html в ajax-запросы, что надо делать "по-человечески"
|
Цитата:
А, кажется я понял: "form" это не имя формы из DOM, это я так (неудачно?) назвал JS-объект (он просто отражает саму форму со странички). |
просто если ты подробнее расскажешь, чего ты пытаешься добиться, можно попытаться найти решение получше ;)
|
У меня была конкретная задача - сделать заполнение формы на сайте. Т.е. я жму кнопочку, на сервер лезет запрос, возвращает данные, которые подставляються в HTML-форму и у же только потом эта форма появляеться на страничке (заполненная как надо).
Но спрашивал я не про это, мне хотелось знать, более абстрактно, как делаються "цепочки вызовов" с "отсрочкой" - вот об этом я и спросил. |
Есть такое понятие: асинхронная функция. Это функция, которая не возвращает значение в return, а передаёт его, вызывая свой аргумент.
function load(url, callback) { // Тут делает запрос на сервер, после чего вызывается callback callback(result); } Вызывается это, соответственно load('/url.php', function(html) { alert(html); }); "Цепочки вызовов", соответственно, просто увеличивают вложенность, избавиться от которых можно именованными функциями. |
Цитата:
Собственно вопрос исчерпан господа, задача выполнена. Но вот тем, у кого есть варианты реализации "отложенных цепочек вызовов" будет моё огромное спасибо :) |
Цитата:
|
Цитата:
Можно грузить все варианты заполнения формы сразу и уже потом, без запроса сервера, по действию пользователя, показывать соответствующую информацию, но мне показалось лучше будет подгружать небольшими "дозами" по мере необходимости. |
а от каких действий зависит содержимое формы и о каких формах идет речь?
|
Мне надо редактировать объекты на странице.
Есть список объектов (например, это заказ - там имя, фамилия, всякие данные) и вот по нажатию мне надо открыть этот объект и редактировать его. |
но ведь список состоит из однотипных объектов? Т.е. ты на страничке уже знаешь как будет выглядеть форма для этого списка, и данные объекта
а отправляешь форму тоже ajax'ом? вообще, если список довольно простой, можно сделать редактирование элементов прямо на месте, без диалоговых окон |
Цитата:
Цитата:
|
примеры редактируемых списков можно посмотреть здесь
если полей больше, чем столбцов в списке, можно в диалоговом окне редактировать. Но в любом случае, если делаешь редактирование на той же страничке, то и форму отправляй ajax'ом кроме того, можно сделать редактирование на отдельной страничке (перешел на страничку редактирования, изменил, вернулся назад) и почитай про unobtrusive javascript |
Часовой пояс GMT +3, время: 19:29. |