在GWT中setScrollTop的正确时刻

And*_*rei 2 gwt

我有一个问题,让setScrollTop在GWT中工作.基本上,我正在尝试在构建视图之后设置自定义滚动位置(以专注于特定的所需元素).它似乎不起作用,因为我没有在正确的时间设置它(并且UI可能仍然在渲染/构造等).

设置如下.

  • 我有一个小部件谁的启动方法看起来像这样:

    public void start(AcceptsOneWidget widget, EventBus eventBus) {
    
         widget.setWidget(view);s
             Runnable onLoadCallback = new Runnable() {
             public void run() {
                 initView();
             }
         };
    
         VisualizationUtils.loadVisualizationApi(onLoadCallback, LineChart.PACKAGE);
    }
    
    Run Code Online (Sandbox Code Playgroud)
  • 在initView面板中,我动态构建一个包含一些图表的视图(通过向服务器发出请求,等待答案到来,然后根据服务器的答案呈现UI).

  • 在服务器的答案到达之后,在我完成UI的构建之后,我试图像这样设置滚动位置:

    view.getContainerPanel().getElement().setScrollTop(2000);
    
    Run Code Online (Sandbox Code Playgroud)
  • 这似乎完全没有任何影响.但是,如果我离开这个视图,并稍后再回过头来看,它确实有效(大概是因为它已经初始化了什么?)

问题是:调用setScrollTop的正确时机是什么时候?我尝试从相应的视图中覆盖一些方法,但它似乎不起作用.

And*_*gin 5

在initView()之后使用调度程序:

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

    @Override
    public void execute() {
        view.getContainerPanel().getElement().setScrollTop(2000);
    }
});
Run Code Online (Sandbox Code Playgroud)

说明:

您的程序不知道浏览器渲染视图需要多长时间.这就是为其创建Scheduler.scheduleDeferred()方法的原因.它告诉你的程序要等到浏览器完成它正在做的任何事情并准备好接下来的任务.