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

处理gwt中多个链接的单击事件,gwt,Gwt,如何处理GWT中多个链接上的单击事件。目前,我正在使用gwt引导组件“Navlink”元素进行链接。一个页面中大约有50多个链接。我正在使用uibinder查看部件。链接添加在uibinder xml中。如何处理选择的链接。 我不想为每个链接指定uifield,然后处理单击事件。有没有办法做到这一点??请分享任何想法。。。谢谢..您可以编写这样的多捕获UIHandler @UiHandler({"examsLink", "test"}) protected void onLinkClick(Cl

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

您可以编写这样的多捕获UIHandler

@UiHandler({"examsLink", "test"})
protected void onLinkClick(ClickEvent e) {
    NavLink n = (NavLink) e.getSource();
    n.getName(); // ...
}
然后,你可以:

  • 在单个处理程序方法中对具有常见行为的链接进行分组
  • 使用枚举或某些方法根据导航链接的属性检索导航链接

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

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


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

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

  • 将所有50+
    NavLinks
    放入一个面板(即
    FlowPanel
    HTMLPanel
    等)并使用
    addDomHandler
    (如果您使用
    FocusPanel
    ,您可以使用
    addClickHandler()
    )将
    Clickhandler
    添加到
    Panal
    。当然,在这种情况下,
    event.getSource()
    将不是您的
    NavLink
    ,而是您的
    面板。因此,您必须使用如下方式检索真正的单击目标:
解决方案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
    s中。我猜您将在一个循环中创建50+
    NavLink
    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);
}
ClickHandler ClickHandler=新的ClickHandler({
公共作废一次点击(点击事件){
NavLink NavLink=(NavLink)事件。getSource();
}
}
列表屏幕;//工厂返回字符串列表
用于(字符串屏幕:屏幕){
NavLink NavLink=新的NavLink();
navLink.setText(屏幕);
addClickHandler(clickHandler);
}

请显示一些代码这些是我的uibinder文件中的链接。“bo”指示gwt引导组件。如何知道选择了哪个链接?当前有50多个链接,将来可能会达到100个。因此,通过这种方式,我必须继续添加链接名称。是否有其他方式…但无论如何,您必须为这100个链接中的每一个都编写代码,不是吗?而且每个链接都有不同的名称,这是一个很大的变化行动我猜?在你的情况下,100个链接名称可能比100个UI处理程序更好。如果你想,你可以编写一些js/jquery来解析DOM并找到页面上的所有链接。如果这不能回答你的问题,请更准确地说明你的最终目的,这样我就可以告诉你实现它的最佳方法。我有一种方法。目前所有链接都是下面的代码演示了这个.htmlpanel.addDomHandler(新的ClickHandler(){@Override public void onClick(ClickEvent事件){NavLink NavLink=(NavLink)event.getSource();Window.alert(“link clicked-->”+NavLink.getName();}},ClickEvent.getType());但是我得到了一个异常无法将“event.getSource()”强制转换为“Navlink”“。您能解释一下这样做的最终目的是什么吗?每个链接都会显示一个单独的屏幕。当我单击该链接时,会显示新的屏幕。我有一个导航工厂类,每个链接都有唯一的名称,并且必须为导航链接组件提供唯一的名称,例如:此处的名称为“RR”是唯一的名称。当我点击链接,我应该得到这个名称,然后从工厂类,我会显示相应的屏幕上的链接。希望这可能会清楚…这实际上是最好的答案。