2010-12-04 8 views
9

Ich versuche, einen Link (Anker) in GWT zu erstellen, der angeklickt werden kann und ClickEvent kann verarbeitet werden, während dieser Anker die Seite nicht gleichzeitig neu laden würde. Dies bedeutet grundsätzlich, dass ein href nicht gesetzt werden muss.GWT klickbare Verbindung (Anker) ohne href

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

oder mit

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

wo handleAnchorClick() kehrt:

In JavaScript ist dies so gemacht.

Was wäre der beste Weg, dies in GWT zu erreichen?

+0

Wenn Sie einen href gesetzt, die nicht mit einer '#' der Seite beginnt wird Es wird neu geladen, aber der Verlaufsstapel wird geändert und Sie können auf dieses Ereignis reagieren. –

+0

Genau, der History-Stack wurde geändert und ich möchte mich nicht damit beschäftigen, nur einen anklickbaren Link zu haben. –

Antwort

12

Verwenden Sie tha Anchor element, und rufen Sie addClickListener() method und fügen Sie in was immer Logik Sie wünschen. Diese Art von Anker lädt die Seite nicht neu.

+0

Ja, das scheint der richtige Weg zu sein. Jetzt muss ich nur eine Möglichkeit finden, Anchor mit diesem spezifischen Konstruktor in UiBinder zu verwenden. –

+2

Ah, einfach. '@UiField (vorausgesetzt = wahr)' auf dem Feld. –

+0

ClickListener ist bereits bereinigt (ich habe die gleiche [Frage] (http://stackoverflow.com/questions/7387019/create-link-in-table-cell-and-open-float-popup-by-click-from- – yetanothercoder

10

Hörer sind in GWT Verwendung Handler veraltet

So etwas:

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

}); 
+0

AddClickhandler funktioniert nicht, es muss "addClickHandler" sein, auch die schließende Klammer vergessen, kompiliert dieser Code: btnLogout.addClickHandler (neue ClickHandler() { @Override public void onClick (Ereignis ClickEvent) { Window.alert ("hi"); } }); – XhkUnlimit

8

Wie Sie beschreiben, wird neu geladen href = "#" mit der Seite. Diese

ist, was Sie in UiBinder tun können:

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

Dann können Sie tun, was Sie die ClickEvent in der Ansicht Umsetzung wollen Handhabung.

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

Vergessen Sie nicht, einen Stil hinzuzufügen sonst zu verankern es wie ein normalen HTML-Link verhalten tut:

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