GWT: Как центрировать элемент, содержащий CellTable? - PullRequest
1 голос
/ 24 августа 2011

Я пытаюсь центрировать элемент, который содержит CellTable.Фактическая логика центрирования работает хорошо, но у меня проблемы со всеми этими присоединениями / отсоединениями событий.По сути, я делаю это в своем виджете контейнера:

@Override
public void onLoad() {
  super.onLoad();
  center();
}

Однако, похоже, что onLoad в контейнере не означает, что все дочерние элементы загружены, так что ... фактическая процедура центрированияВызов слишком рано, и Element.getOffsetWidth / getOffsetHeight оба возвращают 0.В результате контейнер отображается с левым верхним углом в центре экрана.

То же самое происходит, если я использую AttachEvent.Handler на CellTable.

Итак.... есть ли какое-либо событие в CellTable, или Widget, или в любом другом месте, которое позволяет мне запускать действие, когда поддерево DOM было присоединено к DOM?

Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 24 августа 2011

Взгляните на scheduleDeferred . Отложенная команда выполняется после возврата из цикла событий браузера.

Scheduler.get().scheduleDeferred(new ScheduledCommand() {
    @Override
    public void execute() {
        center();
    }
});
1 голос
/ 24 августа 2011

Переопределить onAttach вместо onLoad.onAttach вызовы реализации по умолчанию onLoad, за которыми следует doAttachChildren (что вызывает onAttach для каждого дочернего виджета), поэтому следующий код должен вызывать center после присоединения дочерних элементов:

@Override
public void onAttach() {
  super.onAttach();
  center();
}

(Кстати, реализация по умолчанию onLoad запрещена)

...