Задать вопрос
@leha_trushin

Как перехватывать событие прорисовки динамических данных в bootstrap modal?

Есть некое модальное окно bootstrap modal с id = "my_modal". Добавляю динамически наполнение тела <div class="modal-body"> ... </div> диалогового окна в jquery типа так:
1. Создаем div id со span
$('#my_modal .modal-body').append($("<div id='my_test_id'>Имя<span>Значение</span></div>"));

2. Динамически заполняю span $('#my_test_id span').text('Что-то там...');
А теперь собственно суть проблемы. "Что-то там" берется как результат выполнения цепочки промисов. То есть выполнился какой-то промис, в его then обновляется поле span. В следующем then span снова обновляется. По шагам все работает хорошо. А вот в реальном времени видимо прорисовка не успевает отрабатывать за асинхронными операциями. В итоге в процессе работы цепочки промисом видим span = "Значение" и только уже когда вся цепочка отрабатывает, в нем отрисовывается результат последнего промиса. В самом bootstrap modal нашел только event для прорисовки формы (shown.bs.modal). Мне представляется, что каким-то образом надо тормозить выполнение на пункте 2 до тех пор, пока не выполнится обновление span. Но никак не соображу, каким образом это можно реализовать...

UPD. Console.log всю нужную инфу выводить нормально. То есть промисы работают правильно и возвращают то, что надо. Во время работы в самом модальном диалоге ничего не меняется, но картинка в браузере "прыгает". Это происходит видимо при каждом обновлении span при отработке промиса в then. Вопрос видимо в синхронизации прорисовки и асинхронных потоков...
  • Вопрос задан
  • 438 просмотров
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
alexiusp
@alexiusp
senior frontend developer
Я немного не понял ситуацию. Если ваши промисы выполняются быстрее, чем происходит отрисовка, то зачем вообще выводить эту промежуточную информацию? Пользователь не успеет её прочитать. Отобразите индикатор загрузки изначально и заполняйте тэг значением в самом конце. Либо добавляйте новый тэг в конец, а предыдущий скрывайте с анимацией - так будет красивее.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы