2010-12-04 13 views
9

Estoy tratando de crear un enlace (ancla) en GWT que se puede hacer clic y es ClickEvent se puede procesar, mientras que al mismo tiempo este ancla no podría volver a cargar la página. Esto básicamente significa que no se debe establecer un href.GWT enlace seleccionable (ancla) sin href

en Javascript esto se hace así:

<a href="javascript:handleAnchorClick();">Link</a> 

o con

<a href="#" onclick="return handleAnchorClick()">Link</a> 

donde handleAnchorClick() vuelve falsa.

¿Cuál sería la mejor manera de lograr esto en GWT?

+0

Si establece un href que comienza con un '#' la página no se se volverá a cargar, pero se cambiará la pila de historial y podrá responder a ese evento. –

+0

Exactamente, la pila del historial ha cambiado y no quiero lidiar con eso solo para tener un enlace en el que se pueda hacer clic. –

Respuesta

12

Utilice tha Anchor element, y llame al addClickListener() method y agregue la lógica que desee. Este tipo de anclaje no recarga la página.

+0

Sí, esta parece ser la manera correcta. Ahora solo necesito encontrar una forma de usar Anchor con este constructor específico en UiBinder. –

+2

Ah, simple. '@UiField (provided = true)' en el campo. –

+0

ClickListener ya está privado (tengo la misma [pregunta] (http://stackoverflow.com/questions/7387019/create-link-in-table-cell-and-open-float-popup-by-click-from- it). – yetanothercoder

10

Los oyentes están en desuso de los manipuladores de uso GWT

Algo así:

Anchor a = new Anchor("hi"); 
a.addClickhandler(new ClickHandler() { 
    @Override 
    public void onClick(ClickEvent event) { 
      Window.alert("hi"); 
    } 

}); 
+0

AddClickhandler no funciona, debe ser "addClickHandler", también se olvidó de la llave de cierre, este código compila: btnLogout.addClickHandler (nuevo ClickHandler() { @Override public void onClick (evento ClickEvent) { Window.alert ("hi"); } }); – XhkUnlimit

8

Como usted describe, usando href = "#" que se recargue la página.

Esto es lo que puede hacer en UiBinder:

<g:Anchor ui:field="myScriptedAnchor" href="javascript:;"> 
     MyScriptedAnchorText 
    </g:Anchor> 

A continuación, puede hacer lo que quiera manipular el ClickEvent en la implementación vista.

@UiHandler("myScriptedAnchor") 
    void onMyScriptedAnchorClick(ClickEvent event) { 
     // TODO whatever you want to do... 
    } 
8

No se olvide de añadir un estilo de anclar lo contrario es imposible comportarse como un enlace HTML normal:

.anchor { 
      text-decoration: underline; 
      font-weight: bold; 
      cursor: pointer; 
      display: block; 
     }