2

setScrollTop を GWT で動作させるのに問題があります。基本的に、ビューが構築された直後に、(特定の目的の要素に焦点を当てるために) カスタムのスクロール位置を設定しようとしています。適切なタイミングで設定していないため、機能していないようです (UI はまだレンダリング/構築中などである可能性があります)。

セットアップは次のとおりです。

  • start メソッドが次のようなウィジェットがあります。

    public void start(AcceptsOneWidget widget, EventBus eventBus) {
    
         widget.setWidget(view);s
             Runnable onLoadCallback = new Runnable() {
             public void run() {
                 initView();
             }
         };
    
         VisualizationUtils.loadVisualizationApi(onLoadCallback, LineChart.PACKAGE);
    }
    
  • initView パネル内で、いくつかのチャートを含むビューを動的に作成します (サーバーにリクエストを送信し、応答が来るのを待ってから、サーバーの応答に基づいて UI をレンダリングします)。

  • サーバーからの応答が到着した後、UI の構築が完了した後、次のようにスクロール位置を設定しようとしています。

    view.getContainerPanel().getElement().setScrollTop(2000);
    
  • これはまったく効果がないようです。ただし、このビューを離れて少し後で戻ると、機能します (おそらく、既に初期化されているか何かが原因でしょうか?)

質問は次のとおりです: setScrollTop を呼び出す正しいタイミングはいつですか? 対応するビューからいくつかのメソッドをオーバーライドしようとしましたが、うまくいかないようです。

4

1 に答える 1

5

initView() の後にスケジューラを使用します。

Scheduler.get().scheduleDeferred(new ScheduledCommand() {

    @Override
    public void execute() {
        view.getContainerPanel().getElement().setScrollTop(2000);
    }
});

説明:

プログラムは、ブラウザーがビューをレンダリングするのにかかる時間を知りません。これが Scheduler.scheduleDeferred() メソッドが作成された目的です。ブラウザが実行していたことをすべて終了し、次のタスクの準備が整うまで待機するようにプログラムに指示します。

于 2012-09-25T14:35:37.080 に答える