Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
GWT:如何将包含CellTable的元素居中?_Gwt_Gwt 2.2 Celltable - Fatal编程技术网

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
inside
HasDataPresenter.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();
    }
});