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. Center с использованием 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();
}

person Johan    schedule 21.10.2012    source источник
comment
Можете ли вы опубликовать свой код onReveal(), который применяется для центрирования диалогового окна?   -  person Andrei Volgin    schedule 22.10.2012
comment
Добавлен код onReveal в сообщении выше.   -  person Johan    schedule 22.10.2012


Ответы (1)


Есть метод addToPopupSlot(child, boolean center); если вы отправляете true для аргумента center, он позаботится о центрировании всплывающего окна в GWTP. Пример: - addToPopupSlot (widget, true)

person JAVAC    schedule 29.11.2012