2016-05-13 111 views
0

因此,我在我的搜索中发现的所有内容都是如何在JS中完成的,我知道该怎么做。我希望找到的是一个GWT机制来做到这一点。加载GWT页面,然后显示window.alert

我想要做的是在页面加载(不难)后在页面上发出提示window.alert(app.getStatus())。问题在于,使用我当前的代码,在页面加载完成之前弹出警报,以便用户看到部分加载的白页,直到单击“确定”按钮时才会执行任何操作。

这是我目前有

public class DisplayApplicationViewImpl extends Composite 
    implements DisplayApplicationView { 

    public DisplayApplicationViewImpl() { 
     /*... 
     Lot of logic that is not helpful 
     ...*/ 

     initWidget(uiBinder.createAndBindUi(this)); 
     Window.alert("Test"); 
    } 
} 

我也尝试下面的(虽然我不认为这是正确的使用),但这些只火一次,当应用程序被打开,然后将除非页面刷新并且仍然存在负载“问题”,否则不会触发任何其他应用程序。

Scheduler.get().scheduleFinally(new RepeatingCommand(){ 
    @Override 
    public boolean execute() { 
     Window.alert("Test"); 
     return false; 
    } 
}); 

这是一个温和的接近,因为它允许加载GIF展示,但我不知道这是为什么有字面上该功能仅此代码没有任何变化。

Scheduler.get().scheduleDeferred(new ScheduledCommand(){ 
    @Override 
    public void execute() { 
     Window.alert("Test"); 
    } 
}); 

我看了一下'Window.onload()',但似乎并不是我的选择。

回答

2

你把你的Window.alert()方法放在initWidget之后,这意味着所有的UI都是在这个消息被显示的时候构建的。如果您想确保浏览器已完成渲染UI,则可以在scheduleDeferredI explain it here)中打包Window.alert()。

此外,加载数据或图像可能会导致延迟。在加载数据的情况下,可以将Window.alert()放入数据加载方法的回调中。对于图像,你可以使用GWT Image widget实现HasLoadHandlers接口,但在大多数情况下使用scheduleDeferred就足够了。

编辑:

每个视图仅构成一次,所以该消息仅一次显示出来。这是正确的行为。如果您想多次显示该消息,您的演示者/活动应显示此消息或告诉视图以显示该消息。

+0

这是我试图概述的方法之一,它仍然不会让页面完全加载。此外,还有一个非常奇怪的行为,这会导致警报只会触发一次,除非刷新应用程序(文字Web应用程序)。我会研究数据加载,但为什么刷新行为? – nerdlyist

+0

1.您的页面在您的GWT代码执行之前已经完全加载。您正在讨论GWT代码加载的页面上的内容。如果你异步加载任何内容,你可以在这些方法的回调中做些什么。 –

+1

2.您的视图只构造一次,所以消息只显示一次。这是正确的行为。如果您想多次显示该消息,您的演示者/活动应显示此消息或告诉视图以显示该消息。 –