2009-12-28 93 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());