2010-12-04 21 views
9

J'essaie de créer un lien (ancrage) dans GWT qui peut être cliqué et ClickEvent peut être traité, tandis que dans le même temps cette ancre ne rechargerait pas la page. Cela signifie essentiellement qu'un href ne doit pas être défini.GWT lien cliquable (ancre) sans href

En javascript cela se fait comme ceci:

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

ou

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

handleAnchorClick() retourne false.

Quel serait le meilleur moyen d'y parvenir dans GWT?

+0

Si vous définissez un href qui commence par un '' # la page ne sera pas être rechargé, mais la pile d'historique sera modifiée, et vous pouvez répondre à cet événement. –

+0

Exactement, la pile de l'historique est changée et je ne veux pas m'en occuper simplement pour avoir un lien cliquable. –

Répondre

12

Utilisez le Anchor element et appelez le addClickListener() method pour ajouter la logique que vous souhaitez. Ce type d'ancre ne recharge pas la page.

+0

Oui, cela semble être la bonne façon. Maintenant, j'ai juste besoin de trouver un moyen d'utiliser Anchor avec ce constructeur spécifique dans UiBinder. –

+2

Ah, simple. '@UiField (fourni = true)' sur le terrain. –

+0

ClickListener est déjà déprimé (j'ai la même [question] (http://stackoverflow.com/questions/7387019/create-link-in-table-cell-and-open-float-popup-by-click-from- – yetanothercoder

10

Les auditeurs sont déconseillés dans les gestionnaires d'utilisation GWT

Quelque chose comme ça:

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

}); 
+0

AddClickhandler ne fonctionne pas, il doit être "addClickHandler", Aussi oublié l'accolade fermante, ce code compile: btnLogout.addClickHandler (new ClickHandler() { @Override public void onClick (événement ClickEvent) { Window.alert ("hi"); } }); – XhkUnlimit

8

Comme vous le décrivez, en utilisant href = "#" rechargera la page.

C'est ce que vous pouvez faire dans UIBinder:

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

Ensuite, vous pouvez faire ce que vous voulez gérer la ClickEvent dans la mise en œuvre de la vue.

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

Ne pas oublier d'ajouter un style à ancrer sinon il ne marche pas se comporter comme un lien html normal:

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