处理gwt中多个链接的单击事件
如何处理GWT中多个链接上的单击事件。目前,我正在使用gwt引导组件“Navlink”元素进行链接。一个页面中大约有50多个链接。我正在使用uibinder查看部件。链接添加在uibinder xml中。如何处理选择的链接。处理gwt中多个链接的单击事件,gwt,Gwt,如何处理GWT中多个链接上的单击事件。目前,我正在使用gwt引导组件“Navlink”元素进行链接。一个页面中大约有50多个链接。我正在使用uibinder查看部件。链接添加在uibinder xml中。如何处理选择的链接。 我不想为每个链接指定uifield,然后处理单击事件。有没有办法做到这一点??请分享任何想法。。。谢谢..您可以编写这样的多捕获UIHandler @UiHandler({"examsLink", "test"}) protected void onLinkClick(Cl
我不想为每个链接指定uifield,然后处理单击事件。有没有办法做到这一点??请分享任何想法。。。谢谢..您可以编写这样的多捕获UIHandler
@UiHandler({"examsLink", "test"})
protected void onLinkClick(ClickEvent e) {
NavLink n = (NavLink) e.getSource();
n.getName(); // ...
}
然后,你可以:
- 在单个处理程序方法中对具有常见行为的链接进行分组
- 使用枚举或某些方法根据导航链接的属性检索导航链接
令人讨厌的是,事件来自任何包含新Navlink组件的页面/组件,但您可以使用Navlink父级来区分出处。有两种方法可以解决此问题:
- 将所有50+
放入一个面板(即NavLinks
、FlowPanel
等)并使用HTMLPanel
(如果您使用addDomHandler
,您可以使用FocusPanel
)将addClickHandler()
添加到Clickhandler
。当然,在这种情况下,Panal
将不是您的event.getSource()
,而是您的NavLink
面板。因此,您必须使用如下方式检索真正的单击目标:
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
s中。我猜您将在一个循环中创建50+NavLink
sNavLink
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”是唯一的名称。当我点击链接,我应该得到这个名称,然后从工厂类,我会显示相应的屏幕上的链接。希望这可能会清楚…这实际上是最好的答案。