GWT - Wo soll ich Codespalten verwenden, während ich Orte/Aktivitäten/Mapper benutze?
-
26-10-2019 - |
Frage
"Core" bezieht sich auf das anfängliche Teil der geladenen Anwendung.
Um URL an Orte zu binden, verwendet GWT
PlaceTokenizer<P extends Place>
. Wenn Sie die Anwendung aus der URL laden, ruft sie die Methode aufP getPlace(String token)
Um eine neue Instanz des Anrufens abzurufen.Aufgrund der asynchronen Natur der Codespaltung kann ich den Ort in a nicht erstellen
runAsync
In dieser Methode. Also muss ich setzen alle Die Orte meiner App im Kern.Um Orte mit Aktivitäten zu verknüpfen, ruft GWT auf
Activity getActivity(Place place)
(auscom.google.gwt.activity.shared.ActivityMapper
) um eine neue Instanz der Aktivität abzurufen.Ich muss noch einmal sagen alle Meine Aktivitäten im Kern.
Folgendes möchte ich versuchen: Schreiben Sie einen Brauch com.google.gwt.place.shared.Delegate
das
- Binden Sie sich an
PlaceChangeRequestEvent
. Wenn das Apppiece, das dem angeforderten Ort entsprichtevent.setWarning(NEED_TO_LOAD_MODULE)
- in dem
confirm(String message)
Methode, stets Rückgabe falsch, wenn die Nachricht entsprichtNEED_TO_LOAD_MODULE
(so stört es den Benutzer nicht) und lädt das Modul überRunAsync
. - Sobald das Modul geladen ist, rufen Sie an
goTo(requestedPlace)
Jedes Apppiece meiner Anwendung enthält eine Reihe von Aktivitäten und die entsprechenden Ansichten. Da werden die Mapper nur dann aufgerufen, wenn PlaceChangeEvent
ist entlassen, ich könnte eine neue Instanz meiner Aktivität überstellen AppPiece.getSomeActivityInstance()
.
Ich bin mir ziemlich sicher, dass dies funktionieren wird, aber was mich stört, ist das
- Wenn ich je nach dem angeforderten Ort das Laden findet, zwingt ich mich, Code zu schreiben, der meinen Mappers sehr ähnlich ist
- Ich möchte meine Plätze im entsprechenden Apppiece haben
- Überschreiben
Delegate
Zu diesem Zweck ist schwierig und ich suche eine bessere Lösung
Lösung
Sie müssen nicht alle Ihre Aktivitäten einsetzen der Kern (wie Sie es nennen): Während eine Aktivitätsinstanz synchron abgerufen wird, darf sie dazu dienen Anfang asynchron. Hier würden Sie Ihre platzieren GWT.runAsync
Anruf.
Sehen http://code.google.com/p/google-web-toolkit/issues/detail?id=5129 und https://groups.google.com/d/topic/google-web-toolkit/8_p_d4at-0e/discussion