2016-05-13 5 views
0

Also alles, was ich in meiner Suche bin zu finden ist, wie es in JS zu tun, was ich weiß, wie zu tun ist. Was ich hoffe, ist ein GWT-Mechanismus, um dies zu tun.laden GWT Seite zeigt dann window.alert

Was ich suche eine Warnung window.alert(app.getStatus()) auf einer Seite gesetzt zu tun, nachdem es geladen wird (nicht hart). Das Problem ist, dass die Warnung mit meinem aktuellen Code erscheint, bevor die Seite fertig geladen ist, so dass der Benutzer eine teilweise geladene weiße Seite sieht, die nichts tut, bis die OK-Schaltfläche geklickt wird.

Dies ist, was zur Zeit ich habe

public class DisplayApplicationViewImpl extends Composite 
    implements DisplayApplicationView { 

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

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

Ich habe auch die unten versucht, (obwohl ich glaube nicht, dass es die richtige Verwendung ist), aber diese nur Feuer einmal, wenn eine Anwendung geöffnet wird, und dann wird feuern Sie auf keine anderen Anwendungen, es sei denn, die Seite wird aktualisiert und hat immer noch die Last "Problem".

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

Dieser ist leicht näher, weil es ein Laden gif ermöglicht zu zeigen, aber ich bin nicht sicher, warum, dass es buchstäblich keine Veränderung in dieser Funktionalität nur dieser Code.

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

Ich habe sah in ‚window.onload()‘, aber das scheint nicht eine Option zu sein, wo ich bin.

Antwort

2

Sie stellen Ihre Window.alert() -Methode nach initWidget, was bedeutet, dass alle UI von der Zeit gebaut wird diese Meldung angezeigt wird. Wenn Sie sicherstellen möchten, dass ein Browser, um das UI-Rendering abgeschlossen ist, können Sie wickeln Window.alert() in scheduleDeferred (I explain it here).

Darüber hinaus kann es zu Verzögerungen durch Laden von Daten oder Bildern verursacht werden. Im Falle des Ladens von Daten können Sie Ihre Window.alert() in einen Callback Ihrer Datenlade-Methode einfügen. Für Bilder können Sie das GWT Image-Widget verwenden, das die HasLoadHandlers-Schnittstelle implementiert, aber in den meisten Fällen sollte die Verwendung von scheduleDeferred ausreichen.

EDIT:

Jede Ansicht nur einmal aufgebaut ist, so dass nur die Meldung einmal auftaucht. Das ist das richtige Verhalten. Wenn Sie die Nachricht mehr als einmal anzeigen möchten, sollte Ihr Moderator/Ihre Aktivität diese Nachricht anzeigen oder der Ansicht mitteilen, dass sie angezeigt werden soll.

+0

Dies ist eine der Methoden, die ich beschrieben habe versucht, und es ist noch nicht den Laden der Seite komplett im Stich gelassen. Außerdem gibt es ein sehr merkwürdiges Verhalten, das dazu führt, dass die Warnung nur einmal ausgelöst wird, wenn die App (literale Web-App) nicht aktualisiert wird. Ich werde in das Laden der Daten schauen, aber warum das Refresh-Verhalten? – nerdlyist

+0

1. Ihre Seite ist vollständig geladen * bevor * Ihr GWT-Code wird sogar ausgeführt. Sie sprechen über den Inhalt auf Ihrer Seite, den GWT-Code lädt. Wenn Sie Inhalt asynchron laden, können Sie in den Callbacks dieser Methoden etwas tun. –

+1

2. Ihre Ansicht wird nur einmal erstellt, daher wird die Nachricht nur einmal angezeigt. Das ist das richtige Verhalten. Wenn Sie die Nachricht mehr als einmal anzeigen möchten, sollte Ihr Moderator/Ihre Aktivität diese Nachricht anzeigen oder der Ansicht mitteilen, dass sie angezeigt werden soll. –