如何检测如果某个视图是完全呈现?(How to detect if a View is fully

2019-10-21 07:45发布

我有一对夫妇,其显示在视图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);    

晚报:$(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

Answer 1:

GWT本身给你一个钩子做到这一点。 它的onLoad() 。 你可以将其覆盖。

例。 如果你想知道当一个FlowPanel的用法控件呈现,你可以使用

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


Answer 2:

您应该使用计划,不定时。 见GWT:定时器和调度类 ,这也解释了区别。

更新:

此外,什么是$(mainPanel) ? 你应该做:

 int height = mainPanel.getOffsetHeight();


Answer 3:

这是在发布如何检测如果一个网页已经使用jQuery完全呈现?

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


文章来源: How to detect if a View is fully rendered?