Lugares/Actividades de GWT: ¿qué se debe utilizar para la navegación?
-
27-10-2019 - |
Pregunta
Tengo una aplicación web GWT Lugares/Actividades.yo suelo Anchor
's click
evento para mover al usuario a un nuevo "lugar", por lo que no hay forma de que el usuario pueda abrir ningún "enlace" en una nueva ventana o pestaña.La pregunta es: ¿cómo puedo hacer que todos estos vínculos sean reales?
Solución
Quizás, en lugar de usar Anchor
y escuchar ClickEvent
, use Hyperlink
con el targetHistoryToken
establecido en el nombre del lugar.
p. ej.
<g:Hyperlink text="Home" targetHistoryToken="home" />
Otros consejos
Mientras usa un Hyperlink
(o InlineHyperlink
) funciona, prefiero usar un ClickHandler
en una Anchor
, porque si alguna actividad devuelve un valor no nulo en mayStop
la URL no habría cambiado todavía (mientras que con una Hyperlink
, lo habría hecho, incluso si el usuario opta por cancelar la navegación).
Para establecer el objetivo (href
) sobre el Anchor
, simplemente usa tu PlaceHistoryMapper
.Y para manejar correctamente Ctrl+clic, clic central y clic derecho, reutilice el HyperlinkImpl
:
Anchor anchor = new Anchor("text", "#" + placeHistoryMapper.getToken(targetPlace));
anchor.addClickHandler(new ClickHandler() {
private static final HyperlinkImpl IMPL = GWT.create(HyperlinkImpl.class);
@Override
public void onClick(ClickEvent event) {
if (IMPL.handleAsClick(event)) {
placeController.goTo(targetPlace);
event.preventDefault();
}
}
});