处理gwt中多个链接的点击事件

时间:2013-10-23 04:58:22

标签: gwt

如何处理GWT中多个链接上的点击事件。目前我正在使用gwt-bootstrap组件“Navlink”元素进行链接。页面中有大约50个以上的链接。我正在使用uibinder进行查看部分。链接在uibinder xml中添加。如何处理选择的链接。 我不想为每个链接提供uifield,然后处理click事件。有没有办法做到这一点?请分享任何想法...谢谢..

3 个答案:

答案 0 :(得分:1)

您可以使用在构造时在其上注册单击处理程序的类来扩展Navlink。

点击处理程序通过EventBus发送自定义点击事件,其中包含您需要的所有信息(名称,链接值,链接父项)。因此,您可以在该总线上侦听自定义单击事件,以获取所需的信息。

令人讨厌的是,事件来自包含新Navlink组件的任何页面/组件,但您可以使用Navlink父项来区分出处。

答案 1 :(得分:0)

您可以像这样写一个多捕捉UIHandler

@UiHandler({"examsLink", "test"})
protected void onLinkClick(ClickEvent e) {
    NavLink n = (NavLink) e.getSource();
    n.getName(); // ...
}

然后,你可以:

  • 使用单个处理程序方法对具有常见行为的组链接。
  • 使用枚举或某种方法根据其属性检索NavLink。

答案 2 :(得分:0)

有两种方法可以解决这个问题:

  • 将所有50 + NavLinks放入面板(即FlowPanelHTMLPanel等)并使用addDomHandler(如果您使用FocusPanel可以使用addClickHandler())向Clickhandler添加Panal。在这种情况下,event.getSource()不是NavLink,而是Panel。因此,您必须使用以下内容检索真正的点击目标:

解决方案1:

public void onClick(ClickEvent event) {
    Element targetElem = Element.as(event.getNativeEvent().getEventTarget());
    Widget targetWidget = null;

    //LOOP through all NavLinks and check 
    if (navLink.getElement().isOrHasChild(targetElem) {
        // Do something
    }
}
  • 为您的所有50 ClickHandler添加NavLink。我猜你会在一个循环中创建你的50 + NavLink

解决方案2:

ClickHandler clickHandler = new ClickHandler( {
    public void onClick(ClickEvent event)  {
         NavLink navLink = (NavLink)event.getSource();
    }
}

List<String> screens; // your factory returns a list of strings
for (String screen: screens) {
    NavLink navLink = new NavLink(); 
    navLink.setText(screen); 
    navLink.addClickHandler(clickHandler);
}