Это потребует некоторых объяснений.
В нашем проекте есть всплывающее окно, в котором есть несколько полей, которые можно редактировать, а также кнопки «Сохранить» и «Отмена» внизу. Нажатие Сохранить, очевидно, сохранит все сделанные вами изменения или просто закроет всплывающее окно, если изменений нет. Отмена также закроет всплывающее окно, если нет изменений. Если вы отменяете изменения, появляется диалоговое окно с запросом подтверждения того, действительно ли вы хотите отменить внесенные изменения.
Идея состоит в том, что если вы нажмете Нет, диалоговое окно подтверждения закроется, но всплывающее окно не будет, поскольку пользователь указал, что не хочет отменять эти изменения.
Проблема сейчас в том, что всплывающее окно закрывается сразу после нажатия кнопки «Отмена», даже если были внесены изменения. Диалоговое окно подтверждения также появляется, но оно не очень полезно, так как всплывающее окно уже исчезло.
Причина, по которой это происходит, заключается в том, что обработчики для закрытия всплывающего окна и отображения диалогового окна подтверждения прикреплены как обработчики щелчков к кнопке Отмена. Раньше это работало до того, как GWT переключился на обработчики, потому что мы передали список слушателей в качестве параметра методу, который показал диалоговое окно подтверждения. Тогда мы будем запускать этих слушателей только в том случае, если пользователь решит, что все в порядке, чтобы изменения были отменены. Поскольку я не контролирую обработчики с момента изменения модели событий (они содержатся в коде виджета GWT), я больше не могу этого делать.
Моя идея исправить это состояла в том, чтобы просто добавить обработчик, закрывающий всплывающее окно, к другому событию, которое будет запускаться только при выборе правильной опции в диалоговом окне подтверждения. Единственная причина, по которой я задаю этот вопрос, состоит в том, чтобы посмотреть, есть ли другой способ сделать это, потому что вся эта вещь, в которую добавлен обработчик закрытия всплывающих окон, обрабатывается в наших макетах xml, и для этой работы потребуются некоторые интересные архитектурные изменения. должным образом.
: BeforePopupClosedEvent запускается, что открывает диалоговое окно подтверждения. Если пользователь указывает, что изменения не должны быть отменены, BeforePopupClosedEvent отменяется. К сожалению, код продолжает выполняться в ожидании ответа пользователя, и обработчик, который закрывает всплывающее окно, продолжает это делать, потому что пользователь еще не выбрал выбор.