假设以下* .ui.xml文件:
<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之外,还有其他解决方法吗?
答案 0 :(得分:29)
还可以选择为多个小部件使用一个注释
@UiHandler(value={"clearButton_1", "clearButton_2"})
void handleClickForLabel1(ClickEvent event) {
//do stuff
}
答案 1 :(得分:13)
只需将它们命名为不同的东西。帮助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
}
答案 2 :(得分:0)
我遇到了这种情况,发现event.getSource()只给出了源对象的实例,而不是它的名字。我必须抛出它并获得它的标题来识别源对象。在我的情况下,我使用MaterialImage并在UiBinder中设置其标题。
实施例: UiBinder代码
select t1.department, t1.sqty, t2.ssubqty
from
(select department, sum(qty) as sqty from store group by department) t1
left join
(select s2.department, s1.sum(sub_qty) as ssubqty
from store_sub s1
inner join store s2 on s1.parent_id=s2.id
group by s2.department) t2 on t1.department=t2.department
在Java中
<m:MaterialImage url="images/icons/simpleLine.svg" ui:field="simpleLine" title="simpleLine" />
<m:MaterialImage url="images/icons/smallDashBigGap.svg"ui:field="smallDashBigGap" title="smallDashBigGap" />
我希望有一个更好的方法,但我能与之合作。