2011-03-08 14 views
5

En una aplicación GWT 2.1+, ¿cómo puedo generar un enlace a un lugar para el consumo externo?GWT Anchor to Place?

Por ejemplo, supongamos que quiero crear un enlace a Place1. Para el consumo interno podría hacer presenter.goTo(new Place1("token")). ¿Cómo puedo hacer esto en un Anchor o algún tipo de enlace que los usuarios puedan pegar en su navegador?

Respuesta

0

Si ya ha asignado el token a un lugar, simplemente cree un delimitador con la propiedad href igual al token.

Anchor anchor = new Anchor("go to place1 ", "token"); 
+0

¿No sería el href han de ser 'PlacePrefix: token'? ¿Cómo puedo obtener programáticamente 'PlacePrefix'? – Justin

5

He aquí cómo lo haría:

final Place1 place = new Place1("token"); 
Anchor anchor = new Anchor("go to place 1", "#" + placeHistoryMapper.getToken(place)); 
anchor.addClickHandler(new ClickHandler() { 
    public void onClick(ClickEvent event) { 
    placeController.goTo(place); 
    event.preventDefault(); 
    } 
}); 
+0

Gracias Thomas, pero ¿esto todavía no tiene el problema de no obtener el prefijo? – Justin

+0

No, el PlaceHistoryMapper es lo que PlaceHistoryHandler usa para generar y analizar tokens; es (¡tiene que serlo!) Plenamente consciente de los prefijos de PlaceTokenizer. –

2

Por lo que yo sé como soy nuevo en GWT a mí mismo, si se utiliza hipervínculo en lugar de anclaje que no tendrá que escribir el controlador de eventos. Te redirigirá al lugar y manejará el historial automáticamente.

1

Puede convertir un lugar en una cadena de tokens utilizando PlaceHistoryMapper. Consulte https://developers.google.com/web-toolkit/doc/latest/DevGuideMvpActivitiesAndPlaces para obtener detalles sobre cómo implementar el diseño de MVP en GWT.

final YourImplementationOfPlaceHistoryMapper placeHistoryMapper = GWT.create(YourImplementationOfPlaceHistoryMapper.class); 

final Hyperlink link = new Hyperlink("A Link To A Place", placeHistoryMapper.getToken(new YourNewPlace())); 
+0

Buena solución, porque habilita el clic derecho abrir-en-nueva-pestaña. –

0

MyView.ui.xml:

<g:InlineHyperlink ui:field="link">Link</g:InlineHyperlink> 

MyView.java:

@UiField InlineHyperlink link; 

public MyView() { 
    // ... 
    link.setTargetHistoryToken(getPlaceHistoryMapper(). 
      getToken(new Place1("token"))); 
    // ... 
}