У меня есть модальное окно, показанное ниже,
Когда я выбираю поле ввода, содержащее средство выбора даты, запускается модальное событие начальной загрузки .on('show.bs.modal'), что очень проблематично, потому что я выполняю все виды асинхронных действий, когда модальное отображение отображается законно. . Я считаю, что модальное окно уже показано, и это событие не должно запускаться.
У меня есть слушатель в событии начальной загрузки 'show.bs.modal', как указано ниже,
handleModalLaunch: () ->
$(@modalClass).on 'show.bs.modal', (event) =>
return if event.dates
promise = new Promise ( (resolve, reject) =>
@setModalData(event)
if (@interactionData)
resolve(@interactionData)
else
reject(false)
)
promise.then(
(results) =>
@trigger 'setRooms', @callBacks
@trigger 'setStudentInfo', @callBacks
(err) ->
err
)
И эффективно, прослушиватель запускается снова, который впоследствии вызывает обещание и связанные обратные вызовы, запуск события проблематичен, потому что, конечно, модальное окно уже показано, и я не хочу, чтобы эти обратные вызовы/обещание выполнялись.
Я добавил return if event.dates
(event.dates
является свойством, уникальным для события средства выбора даты), чтобы в основном сократить этот код в случае, если средство выбора даты вызвало событие модального показа, но, конечно, это хакерство, и я хотел бы лучше понять почему средство выбора даты запускает событие show. Потенциально, поскольку мой слушатель шоу даже привязан к классу модального окна, акт показа средства выбора даты, вероятно, наследует цель родительского модального окна и, вероятно, сам является модальным, т. е. отображается модальное окно (выбор даты), и поскольку средство выбора даты наследуется от родительского модального окна, событие срабатывает так, как если бы родительское модальное окно было «показано». Я совсем запутался? (На самом деле, теперь мне кажется понятнее, но все же нужно понять, как исправить.)