Locais / Atividades do GWT - o que deve ser usado para navegação?
-
27-10-2019 - |
Pergunta
Tenho um aplicativo da web GWT Places / Activities.Eu uso o evento Anchor
do click
para mover o usuário em um novo "lugar", portanto, não há como o usuário abrir qualquer "link" em uma nova janela ou guia.A questão é: como tornar todos esses links reais?
Solução
Talvez em vez de usar Anchor
e ouvir ClickEvent
, use Hyperlink
com targetHistoryToken
definido como o nome do local.
por exemplo,
<g:Hyperlink text="Home" targetHistoryToken="home" />
Outras dicas
Embora o uso de um Hyperlink
(ou InlineHyperlink
) funcione, prefiro usar um ClickHandler
em um Anchor
, porque se qualquer atividade retornar um valor não nulo em mayStop
, o URL não teria mudado ainda (enquanto com um Hyperlink
,teria, mesmo que o usuário decidisse cancelar a navegação).
Para definir o destino (href
) no Anchor
, basta usar seu PlaceHistoryMapper
.E para lidar corretamente com ctrl + clique, clique com o botão do meio e clique com o botão direito, reutilize o 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();
}
}
});