2013-10-23 77 views
0

如何處理GWT中多個鏈接上的點擊事件。目前,我正在使用gwt-bootstrap組件「Navlink」鏈接元素。網頁中有大約50多個鏈接。我正在使用uibinder查看部分。鏈接添加在uibinder xml中。如何處理選擇哪個鏈接。 我不想給每個鏈接使用uifield,然後處理點擊事件。有沒有辦法做到這一點?請分享任何想法...謝謝..處理gwt中多個鏈接的點擊事件

+0

請表現出一定的代碼 –

+0

<博:NavLink UI:字段= 「examsLink」 名稱= 「OW」 標題= 「查看考試」 文本= 「科目」/> \t \t \t \t \t \t <博:NavLink UI:場= 「測試」 NAME = 「RR」 標題= 「查看測試」 文本= 「測試」/>這些都是在我的UiBinder的文件的鏈接。 「bo」表示gwt-bootstrap組件。如何知道選擇哪個鏈接? – yogish

回答

0

有2種方法可以解決這個問題:

  • 把你所有的50+ NavLinks到面板(即FlowPanelHTMLPanel,等等),並使用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到所有50 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); 
} 
0

你可以寫一個多抓UIHandler這樣

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

然後,你可以:在一個單一的與共同行爲

  • 組鏈接處理器方法。
  • 使用枚舉或某種方法根據其屬性檢索NavLink。
+0

目前有超過50個鏈接,未來它可能會達到100.所以,這種方式我不得不繼續添加鏈接名稱..有沒有其他方式... – yogish

+0

但無論如何,你將不得不編寫代碼這100個鏈接是不是?而且每個環節都會有一個很大的變化,我猜想會有不同的動作?在你的情況下,100個鏈接名稱可能會比100個UI處理程序更好。如果你想要的話,你可以寫一些js/jquery來解析DOM並找到頁面上的所有鏈接。如果這不能回答你的問題,請更準確地說明你的最終目的,這樣我就可以告訴你達到它的最佳方式。 – otonglet

+0

我有一種方法。目前所有的鏈接都在htmlpanel下。以下代碼說明了這一點htmlPanel.addDomHandler(新函數clickhandler(){ \t \t \t \t \t \t @Override \t \t \t公共無效的onClick(ClickEvent事件){ \t \t \t \t NavLink navLink =(NavLink)event.getSource(); \t \t \t \t Window.alert( 「點擊鏈接 - >」 + navLink.getName()); \t \t \t \t \t \t \t} \t \t},ClickEvent.getType());但我得到一個例外,「event.getSource()」不能被鑄造成「Navlink」.. – yogish

1

您可以使用在建造時註冊點擊處理程序的類來擴展Navlink。

點擊處理程序通過EventBus發送一個自定義點擊事件,其中包含您需要的所有信息(名稱,鏈接值,鏈接父級)。因此,您可以在該巴士上聽取自定義點擊事件,獲取您需要的信息。

令人討厭的是,事件來自任何包含新Navlink組件的頁面/組件,但您可以使用Navlink父項區分出處。

+0

這實際上是最好的答案。 – otonglet