2011-02-24 31 views
4

假設下面的* .ui.xml文件:如何使用UiBinder在VerticalPanel中處理多個ClickEvents?

<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder' 
     xmlns:g='urn:import:com.google.gwt.user.client.ui'> 
<g:VerticalPanel> 
    <g:Label ui:field="Label1"></g:Label> 
    <g:Label ui:field="Label2"></g:Label> 
    <g:Label ui:field="Label3"></g:Label> 
</g:VerticalPanel> 

如果我現在想ClickHandlers添加到所有三個標籤是這樣的:

@UiHandler("Label1") 
void handleClick(ClickEvent event) { 
    //do stuff 
} 
@UiHandler("Label2") 
void handleClick(ClickEvent event) { 
    //do stuff 
} 
@UiHandler("Label3") 
void handleClick(ClickEvent event) { 
    //do stuff 
} 

我得到一個錯誤,因爲我有3個同名的方法。有沒有辦法解決這個問題,除了創建自定義小部件並將其添加到VerticalPanel?

回答

12

只要命名他們不同的東西。幫助GWT識別您想要處理的事件的重要部分是ClickEvent,但方法名稱無關緊要。

@UiHandler("Label1") 
void handleClickForLabel1(ClickEvent event) { 
    //do stuff 
} 

@UiHandler("Label2") 
void handleClickForLabel2(ClickEvent event) { 
    //do stuff 
} 

@UiHandler("Label3") 
void whoaSomeoneClickedLabel3(ClickEvent event) { 
    //do stuff 
} 
+0

非常感謝萊利。我一直認爲從教程handleClick()是一個命名慣例,但我想它是不是 – 2011-02-24 13:53:37

+0

我對GWT最大的抱怨是說了這麼多是在Java代碼之上產生的 - 它可以是真的很難說怎麼會事連接,甚至難以知道爲什麼事情*不*連接。) – 2011-02-24 14:13:46

27

還有用於多個小工具

@UiHandler(value={"clearButton_1", "clearButton_2"}) 
void handleClickForLabel1(ClickEvent event) { 
    //do stuff 
} 
+3

使用if(event.getSource()等於(clearButton_1))\t \t Window.alert( 「Button1的」);獲得點擊的小部件。 – StefanMK 2013-12-19 19:43:28

0

我跑了這種情況,發現event.getSource()只給出了源對象的實例,而不是它的一個註釋的選項名稱。我必須將其轉換並獲得其標題以識別源對象。在我的情況下,我使用MaterialImage並在UiBinder中設置其標題。

例子: UiBinder的代碼

<m:MaterialImage url="images/icons/simpleLine.svg" ui:field="simpleLine" title="simpleLine" /> 
<m:MaterialImage url="images/icons/smallDashBigGap.svg"ui:field="smallDashBigGap" title="smallDashBigGap" /> 

在Java

Object object = event.getSource(); 
if (object instanceof MaterialImage) { 
    MaterialImage image = (MaterialImage) object; 
    String type = image.getTitle(); 
    if (type.equals("simpleLine")) { 
     ... 
    } 

我希望能有一個更好的辦法,但僅此而已,我可以一起工作。