GWT:如何将包含CellTable的元素居中?
我正在尝试将包含GWT:如何将包含CellTable的元素居中?,gwt,gwt-2.2-celltable,Gwt,Gwt 2.2 Celltable,我正在尝试将包含CellTable的元素居中放置。实际的 居中逻辑工作正常,但我对所有这些都有问题 附加/分离事件。基本上,我是在我的容器里做的 小部件: 然而,似乎容器上的onLoad并不意味着所有 孩子们已经上了课,所以。。。实际的定心程序也被调用 早期和元素。getOffsetWidth/GetOffsetWight都返回0。 这将导致容器显示在左上角 在屏幕中央 如果在CellTable上使用AttachEvent.Handler,也会发生同样的情况 所以。。。在CellTable或Wi
CellTable
的元素居中放置。实际的
居中逻辑工作正常,但我对所有这些都有问题
附加/分离事件。基本上,我是在我的容器里做的
小部件:
然而,似乎容器上的onLoad
并不意味着所有
孩子们已经上了课,所以。。。实际的定心程序也被调用
早期和元素。getOffsetWidth
/GetOffsetWight
都返回0
。
这将导致容器显示在左上角
在屏幕中央
如果在CellTable
上使用AttachEvent.Handler
,也会发生同样的情况
所以。。。在CellTable
或Widget
或其他任何东西上是否有任何事件
允许我在DOM子树已连接到时触发操作
大教堂
提前感谢。覆盖
onAttach
而不是onLoad
onAttach
默认实现调用onLoad
后接doAttachChildren
(在每个子部件上调用onAttach
),因此在连接子部件后,以下代码应调用center
:
@覆盖
公共图书馆{
super.onAttach();
中心();
}
(顺便说一句,onLoad的默认实现是no-op)看看。浏览器事件循环返回后,将执行延迟命令
Scheduler.get().scheduleDeferred(new ScheduledCommand() {
@Override
public void execute() {
center();
}
});
无法工作,因为表数据是使用
Scheduler.scheduleFinally
insideHasDataPresenter.ensurePendingState()
呈现的。然而,HasDataPresenter.resolvePendingState
做了真正的工作,似乎可以使用调用HasDataPresenter.flush
的CellTable.getRowElement
间接调用它,然后调用HasDataPresenter.resolvePendingState
。非常老练,但这似乎是在CellTable
上强制渲染的唯一方法。另一种解决方案cleaner是使用AbstractHasData.addLoadingStateChangeHandler
侦听LOADED
事件。不幸的是,LOADED
事件是在执行渲染之前触发的。它似乎可以工作,但在CellTable内部用于渲染行的命令之前执行此命令的可能性有多大?我这样问是因为它使用了scheduleFinally
,老实说,我还不了解所有这些调度。没有,除非CellTable调度其他延迟命令来呈现行。下面是一个关于调度程序方法的有用答案。
Scheduler.get().scheduleDeferred(new ScheduledCommand() {
@Override
public void execute() {
center();
}
});