Я использую GWT 2.4, GWTP и Chrome 22.0.1229.94 для тестирования. Я боролся с этой проблемой в течение нескольких дней.
При запуске я представляю собственный PopupDialog, используя представление, которое расширило PopupViewImpl. В переопределенном методе onReveal() я центрирую диалог. Код GWTP центрируется синхронно, а также с использованием scheduleDeferred.
В режиме разработки и запуске на локальном сервере все работает так, как ожидалось: всплывающее диалоговое окно всегда правильно отображается и центрируется. Я также тестировал в IE.
Однако при развертывании на работающем веб-сервере в Интернете я заметил, что при обновлении с помощью F5 иногда CSS не применяется до того, как сценарий попытается центрировать диалоговое окно. Это приводит к неверным измерениям и диалоговому окну не по центру. Интересно, что это происходит время от времени, как правило, когда браузер недостаточно быстро обрабатывает все (CSS) ресурсы до вызова запланированной отложенной команды.
Итак, я уже пробовал следующее:
- Загрузка CSS разными способами (ссылка в HTML-файле, ссылка в GWT-модуле, помещается в CssResouce)
- Center с использованием 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();
}