GWT/GWTP PopupDialog не всегда центрирован из-за задержанного рендеринга CSS

Я использую GWT 2.4, GWTP и Chrome 22.0.1229.94 для тестирования. Я боролся с этой проблемой в течение нескольких дней.

При запуске я представляю пользовательский PopupDialog, используя представление, которое расширило PopupViewImpl. В переопределенном методе onReveal() я центрирую диалог. Код GWTP центрируется синхронно, а также с помощью scheduleDeferred.

В режиме разработки и работы выполняются на локальном сервере, все работает как положено: всплывающее диалоговое окно всегда отображается и центрируется правильно. Я также проверил в IE.

Однако при развертывании на живом веб-сервере в Интернете я замечаю, что при обновлении с использованием F5 иногда CSS не применяется до того, как сценарий пытается центрировать диалог. Это приводит к неправильным измерениям, и диалог не размещается в центре. Интересно, что это происходит только время от времени, как правило, когда браузер недостаточно быстр для рендеринга всех (CSS) ресурсов до вызова запланированной отложенной команды.

Итак, я уже попробовал следующее:

  1. Загрузка CSS разными способами (ссылка в HTML-файле, ссылка в GWT-модуле, помещена в CssResouce)
  2. Центр, используя Scheduler.get(). ScheduleDeferred в качестве кода по умолчанию, также делает.
  3. Вызов 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)

Другие вопросы по тегам