2016-05-13 217 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.您的視圖只構造一次,所以消息只顯示一次。這是正確的行爲。如果您想多次顯示該消息,您的演示者/活動應顯示此消息或告訴視圖以顯示該消息。 –