2009-12-28 31 views
0

在我的GWT項目中,我們正在修改設計,並且我遇到了一個問題。GWT超鏈接getHTML不支持點擊事件

我的網站標題,我們有一個登錄鏈接,它來自諸如「已經註冊的會員 - 登錄 - Bla bla bla」之類的文字。

我用新的超鏈接(「Login」,「」).getHTML()替換「登錄」文本。

我得到的鏈接,但點擊事件不起作用。

如果我添加像horizo​​ntalPanel.add(新的超鏈接(「登錄」,「」))面板內的超鏈接,單擊事件工作正常。

如何解決這個問題。


我都嘗試之後和調用getHTML()之前設置clicklisner和它不工作

回答

0

你添加點擊處理程序的超鏈接使用getHTML更換前()?如果是這樣,我會猜測,點擊處理程序的代碼不包含在正在設置的HTML中。

4

Hyperlink.getHTML()返回的字符串不是GWT小部件,因此它沒有點擊處理程序或任何與其關聯的特殊小部件功能。這只是一個字符串。這就是爲什麼它的工作原理,當你直接窗口小部件添加超鏈接到你的面板,像這樣:

horizontalPanel.add(new Label("Already a registered member - ")); 
horizontalPanel.add(new Hyperlink("Login", "")); 
horizontalPanel.add(new Label(" - Bla bla bla")); 

如果您傾向於使用小部件,而不是它們的字符串/ HTML表示,他們的活動將正常工作。

P.S:如果你想要一個HTML超鏈接而不與GWT的歷史系統進行交互,你可以使用Anchor來代替。你在你的頁面已經有此HTML:

<p> 
    Already a registered member - 
    <a id="loginLink" href="javascript:void(0);">Login</a> 
    - Bla bla bla 
</p> 

然後你就可以有固定小部件包裝現有的HTML超鏈接,並添加點擊處理了這一點。

Anchor a = Anchor.wrap(DOM.getElementById("loginLink")); 
a.addClickHandler(...); 
1

我建議您只創建兩個小部件,一個持有登錄鏈接,另一個持有文本。根據情況切換可見標誌,您將遇到更少的問題和更簡單的解決方案。

類似的東西:

loginLink = new Hyperlink("login"); 
loginLink.addClickHandler(handler); 

label = new Label("Already a registered member - "); 

horizontalPanel.add(label); 
horizontalPanel.add(loginLink); 
horizontalPanel.add(new Label(" - Bla bla bla")); 

label.setVisible(isLoggedIn()); 
loginLink.setVisible(!isLoggedIn());