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