Клуб API Карт

ожидание обработки событий

vialorn
5 июля 2010, 13:15

Вопрос к знатокам: у меня обрабатывается событие onBoundsChange, в нем происходит формирование новой группы маркеров путем сканирования большого массива, старая группа затем удаляется с карты, отображается новая. Все работает, но хочется, чтобы в то время, пока происходит обработка данных - у пользователя на экране висел индикатор прогресса. Я реализовал обработчики, и отладочная печать показывает, что они срабатывают. Но - как-то странно.

Визуально, карта перетаскивается, отображается новый набор маркеров, и сразу отображается конечный вариант окна статуса. А исходный вариант окна статуса, с индикатором ожидания - проскакивает мгновенно. Такое впечатление, что обработка массива "вытесняет" код перерисовки интерфейса.

Вопрос: можно это как-то поправить? Вроде в свое время натыкался в документации по jQuery на описание функции, которая заставляет ждать основно код, пока не выполнятся фоновые обработчики. А сейчас - не могу найти...

8 комментариев
Подписаться на комментарии к посту
Если я не ошибаюсь - единсвенный вариант заблокировать скрипты - открыть модальное окно, или запустить синхронный ajax реквест.

Только зачем вам блокировать работу?
Лично у меня различные сайты, которые БЛОКИРУЮТ МНЕ РАБОТУ(прочитайте еще раз) вызывают презрение.
Как пример - aroundme.ru

В вашем случае все малек хитрее.
Выполнение в скриптах различных DOM операций в большинстве случаев откладывается до окончания работы скриптов( работа с деревом, рефреш, рефлов - это разные операции, разлинчных уровней).
Если вы хотите показать блокиратор, и снять его по окончанию работы...

Показываем.
setTimeout(function(){
чего тама надо нам сделать
снять блокиратор
},0);

setTimeout(..,0) начнет выполняться сразу же после разгребания очереди.
В данном случае будем считать что имееется в виду - сразу же после показа блокера.

я не пытаюсь блокировать работу пользователя. но считаю, что корректное информирование о состоянии длительного процесса - необходимо. если процесс состоит из двух фаз (загрузка и обсчет данных), считаю нужным, чтобы на экране сначала было "загрузка", потом "расчет". а не так, что сначала "загрузка", а потом сразу "готово"...
Вы верно заметили, проблема, видимо в том, что операции обновления DOM откладываются, пока исполняется тяжелый "расчетный" код.

Информер у меня висит вверху экрана, и ничего не блокирует, только что места занимает немножко.
Какнить потом покажите что получилось.
Лично я сидел и колдовал до тех пор пока полное обновление карты у меня не стало глазу не заметно.
Но да, колдовать пришлось неделю почти
Спасибо!
Вариант с использованием setTimeout(..,0)- сработал :-)
А можете дать ссылку на страницу?
пока нет - разработка на локальном сервере.
как сбросим обновление на публичный сервер - тогда запросто.
скажите пожалуйста а каким образом  вы удаляете все метки на карте?

а то у меня возникла проблема : после BoundsChange новые метки накладываются на старые


 
С карты можно удалить все оверлеи с помощью метода removeAllOverlays()