0

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

4

3 回答 3

1

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

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

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

于 2013-10-24T11:05:10.220 回答
0

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

  • 将你所有的 50+NavLinks放入一个面板(即FlowPanel,HTMLPanel等)并使用addDomHandler(如果你使用 aFocusPanel你可以只使用addClickHandler())将 a 添加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
    }
}
  • ClickHandler给你所有的 50 多岁加一个NavLink。我猜你会NavLink在一个循环中创建你的 50+ s。

解决方案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);
}
于 2013-10-24T11:26:05.963 回答
0

你可以像这样编写一个多捕获 UIHandler

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

那么,您可以:

  • 在单个处理程序方法中对具有常见行为的链接进行分组。
  • 使用枚举或某种方法根据其属性检索 NavLink。
于 2013-10-23T06:45:55.047 回答