GWT/GWTP PopupDialog не всегда центрирован из-за задержанного рендеринга CSS
Я использую GWT 2.4, GWTP и Chrome 22.0.1229.94 для тестирования. Я боролся с этой проблемой в течение нескольких дней.
При запуске я представляю пользовательский PopupDialog, используя представление, которое расширило PopupViewImpl. В переопределенном методе onReveal() я центрирую диалог. Код GWTP центрируется синхронно, а также с помощью scheduleDeferred.
В режиме разработки и работы выполняются на локальном сервере, все работает как положено: всплывающее диалоговое окно всегда отображается и центрируется правильно. Я также проверил в IE.
Однако при развертывании на живом веб-сервере в Интернете я замечаю, что при обновлении с использованием F5 иногда CSS не применяется до того, как сценарий пытается центрировать диалог. Это приводит к неправильным измерениям, и диалог не размещается в центре. Интересно, что это происходит только время от времени, как правило, когда браузер недостаточно быстр для рендеринга всех (CSS) ресурсов до вызова запланированной отложенной команды.
Итак, я уже попробовал следующее:
- Загрузка CSS разными способами (ссылка в HTML-файле, ссылка в GWT-модуле, помещена в CssResouce)
- Центр, используя Scheduler.get(). ScheduleDeferred в качестве кода по умолчанию, также делает.
- Вызов RootLayoutPanel.get(). OnResize() в onReveal, чтобы попытаться вызвать некоторую разметку перед отложением центрирования.
Я замечаю такое же поведение в Chrome и IE, поэтому это может не быть проблемой браузера. Мой вопрос заключается в том, где поставить мой "центральный" вызов, чтобы он вызывался после того, как все CSS были правильно применены, или если есть что-то еще, что я могу сделать, чтобы заставить CSS отображаться?
Спасибо!
Вот код onReveal в Presenter, расширяющий PresenterWidget:
@Override
protected void onReveal() {
super.onReveal();
// Hide loading image
fireEvent(new HideApplicationLoadingImageEvent());
// Reset message
getView().setStatusMessage(null);
// Center the popup
getView().center();
}
1 ответ
Есть метод addToPopupSlot(дочерний, логический центр); если вы отправляете true для центрального аргумента, он заботится о центрировании всплывающего окна в GWTP. Пример:- addToPopupSlot(widget, true)