如何处理GWT中多个链接上的点击事件。目前我正在使用gwt-bootstrap组件“Navlink”元素进行链接。页面中有大约50个以上的链接。我正在使用uibinder进行查看部分。链接在uibinder xml中添加。如何处理选择的链接。 我不想为每个链接提供uifield,然后处理click事件。有没有办法做到这一点?请分享任何想法...谢谢..
答案 0 :(得分:1)
您可以使用在构造时在其上注册单击处理程序的类来扩展Navlink。
点击处理程序通过EventBus发送自定义点击事件,其中包含您需要的所有信息(名称,链接值,链接父项)。因此,您可以在该总线上侦听自定义单击事件,以获取所需的信息。
令人讨厌的是,事件来自包含新Navlink组件的任何页面/组件,但您可以使用Navlink父项来区分出处。
答案 1 :(得分:0)
您可以像这样写一个多捕捉UIHandler
@UiHandler({"examsLink", "test"})
protected void onLinkClick(ClickEvent e) {
NavLink n = (NavLink) e.getSource();
n.getName(); // ...
}
然后,你可以:
答案 2 :(得分:0)
有两种方法可以解决这个问题:
NavLinks
放入面板(即FlowPanel
,HTMLPanel
等)并使用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
}
}
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);
}