Wie sinnvoll ist Aktivität.Kann aufhören ()?
-
09-12-2019 - |
Frage
Ich frage mich, ob es einen nicht trivialen Anwendungsfall für das gibt com.google.gwt.activity.shared.Activity#mayStop
Methode.
- Der
com.google.gwt.place.shared.PlaceController.Delegate#confirm
ist eine blockierende, also können Sie keine andere verwendenDelegate
, das verwendet Rückrufe.Ich weiß wirklich nicht, warum dies blockierend implementiert ist, da die GWT-Leute immer sagen, dass Benutzerinteraktionen asynchron gehandhabt werden sollten. - Der
mayStop
methode wird immer aufgerufen.Auch wenn dieActivityManager
würde das gleiche zurückgebenActivity
und die Benutzeroberfläche würde sich nicht ändern.Die Aktivität muss also beispielsweise prüfen, ob der Benutzer nicht gespeicherte Änderungen hat und ob eine Ortsänderung wirklich dazu führen würde, dass die nicht gespeicherten Daten verworfen werden.Ich denke, diese Überprüfung könnte einfacher durchgeführt werden, bevor Sie anrufenplaceController.goTo(new Place())
.
Was meinst du?
Lösung
sehen http://code.google.com/p/google-web-toolkit/issues/detail?id=6228#c1 TL; DR: asynchrone Behandlung öffnet die Tür zu zu vielen Randfällen, Fehlern, Verwirrung und unterschiedlichen Bedürfnissen / Wünschen, wie es funktionieren soll.
Die Aktivität, die das tut
goTo
ist nicht unbedingt derjenige, der einchecken mussmayStop
.In dem Fall ist es, dann, wenn es die Überprüfung vor dem Ausführen dergoTo
(und dann in einen Staat zu überführen, in dem diemayStop
wird zurückkehrennull
), dann gibt es in dem Fall eine andere Aktivität mit nicht gespeicherte Änderungen, wird dies dazu führen, dass zwei Bestätigungen an den Benutzer angefordert werden.
Es ist auch möglich zu hörenPlaceChangeRequestEvent
s und bedingter AufrufsetWarning
, anstatt den Check-in zu machenmayStop
.Auf diese Weise haben Sie Zugriff auf den Ort, zu dem Sie navigieren;aber es koppelt Ihre Aktivität mit den Orten und deren Zuordnung zu Aktivitäten (z.a aktivität auflisten könnte auf einem angezeigt werden details ort auf dem Desktop, aber nicht auf dem Handy);das liegt in der Verantwortung desActivityMapper
s.
Vergessen Sie auch nicht, dass die Navigation vom Browser ausgelöst werden kann (Benutzer navigiert im Browserverlauf).Die Sache ist:im Web hat der Benutzer die Kontrolle.
Alles in allem ist es wahrscheinlich besser (und einfacher), einfach das zu tungoTo
s und verlassen Sie sich aufmayStop
um Bestätigung zu bitten.(die Aktivität könnte auch die Auslösung von Schaltflächen / Links deaktivieren.)goTo
in dem Fall gibt es nicht gespeicherte Änderungen, so dass die Navigation nur durch andere Aktivitäten ausgelöst werden konnte).