1

を含む要素を中央に配置しようとしていますCellTable。実際のセンタリングロジックは問題なく機能しますが、これらすべてのアタッチ/デタッチイベントに問題があります。基本的に、私はコンテナウィジェットでこれを行っています:

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

ただし、onLoadコンテナ上ですべての子がロードされたことを意味するわけではないようです。したがって、実際のセンタリングルーチンの呼び出しが早すぎて、Element.getOffsetWidth/getOffsetHeightが両方とも返され0ます。これにより、コンテナが画面の中央の左上隅に表示されます。

AttachEvent.Handlerでを使用した場合も同じことが起こりCellTableます。

それで... DOMサブツリーがDOMに接続されているときに、アクションをトリガーできるイベントはありますCellTableか?Widget

前もって感謝します。

4

2 に答える 2

2

scheduleDeferredを見てください。延期されたコマンドは、ブラウザー イベント ループが戻った後に実行されます。

Scheduler.get().scheduleDeferred(new ScheduledCommand() {
    @Override
    public void execute() {
        center();
    }
});
于 2011-08-24T11:44:27.433 に答える
1

onAttachの代わりにオーバーライドしonLoadます。onAttachデフォルトの実装呼び出しonLoadに続いてdoAttachChildren(onAttach子ウィジェットごとに呼び出します)、子centerがアタッチされた後に次のコードを呼び出す必要があります。

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

(ところで、のデフォルトの実装onLoadはノーオペレーションです)

于 2011-08-24T11:14:03.560 に答える