如何检测View是否完全呈现?

时间:2014-11-24 15:56:13

标签: java javascript html gwt gwtp

我有一些GWT小部件显示在视图中。

该视图包含以下内容:

FlowPanel mainPanel = new FlowPanel();
RootPanel.get().add(mainPanel);
Label label = new Label("test");
mainPanel.add(label);
FlowPanel otherPanel = new FlowPanel();
mainPanel.add(otherPanel);

在完全呈现视图后,mainPanel获得其最终高度。我需要在渲染过程完成后从mainPanel获取高度值。

这是我到目前为止所做的事情:

    new Timer() {

        @Override
        public void run() {
            int height = $(mainPanel).height();
            // do something with the mainPanel height
        }
    }.schedule(300);    

Noite:$(mainPanel)是GWTQuery的使用。 我设置了一个计时器,希望在计时器触发时完成视图渲染过程。我想这不是一个非常聪明的解决方案。

如何检测视图是否完全呈现以获得mainPanel的最终高度?

修改

我也尝试过使用:

@Override
protected void onReveal() {
    super.onReveal();
    Scheduler.get().scheduleDeferred(new ScheduledCommand() {

        @Override
        public void execute() {
            // get mainPanel height is incorrect
        }
    });
}

但似乎渲染未完成,因此mainPanel没有正确的高度。

修改

使用SDM时,调度程序似乎在移动设备和桌面上的工作方式不同。我创建了一个演示项目(https://github.com/confile/GWT-2.7-Scheduler-Test)来显示问题。

我在这里为此问题创建了另一个问题:https://stackoverflow.com/questions/27128787/gwt-2-7-scheduler-works-different-on-mobile-and-desktop-in-sdm

3 个答案:

答案 0 :(得分:1)

您应该使用调度程序,而不是计时器。见GWT: Timer and Scheduler Classes,它解释了这一区别。

更新:

另外,$(mainPanel)是什么?你应该这样做:

 int height = mainPanel.getOffsetHeight();

答案 1 :(得分:1)

Gwt本身就为你提供了一个钩子。它是onLoad()。你可以覆盖它。

实施例。如果您想知道何时呈现FlowPanel的小部件,可以使用

FlowPanel flowPanel = new FlowPanel(){
                      @Override
                      protected void onLoad()
                      {
                        //Do your stuff here
                      }};

答案 2 :(得分:-1)

这张贴于How to detect if a page has fully rendered using jQuery?

$(window).load(function() {
    //everything is loaded
});