GWT: Как центрировать элемент, содержащий CellTable?
Я пытаюсь центрировать элемент, который содержит CellTable
, Фактическая логика центрирования работает хорошо, но у меня проблемы со всеми этими присоединениями / отсоединениями событий. По сути, я делаю это в моем контейнере виджета:
@Override
public void onLoad() {
super.onLoad();
center();
}
Тем не менее, кажется, что onLoad
на контейнере не означает, что все дочерние элементы загружены, так что... фактическая процедура центрирования вызывается слишком рано и Element.getOffsetWidth
/getOffsetHeight
оба возвращаются 0
, В результате контейнер отображается с левым верхним углом в центре экрана.
То же самое происходит, если я использую AttachEvent.Handler
на CellTable
,
Итак... есть ли событие на CellTable
или на Widget
или что-то, что позволяет мне запускать действие, когда поддерево DOM было присоединено к DOM?
Заранее спасибо.
2 ответа
Посмотрите на scheduleDeferred. Отложенная команда выполняется после возврата из цикла событий браузера.
Scheduler.get().scheduleDeferred(new ScheduledCommand() {
@Override
public void execute() {
center();
}
});
Override onAttach
вместо onLoad
, onAttach
вызовы реализации по умолчанию onLoad
с последующим doAttachChildren
(который вызывает onAttach
на каждом дочернем виджете), поэтому следующий код должен вызывать center
после того, как дети были прикреплены:
@Override
public void onAttach() {
super.onAttach();
center();
}
(Кстати, реализация по умолчанию onLoad
это неоперация)