2

我在让 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);
    }
    
  • 在 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 回答