Как обрабатывать несколько ClickEvents в вертикальной панели с UiBinder? - PullRequest
5 голосов
/ 24 февраля 2011

Предполагая следующий файл * .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?

Ответы [ 3 ]

30 голосов
/ 27 октября 2011

Существует также возможность использовать одну аннотацию для нескольких виджетов

@UiHandler(value={"clearButton_1", "clearButton_2"})
void handleClickForLabel1(ClickEvent event) {
     //do stuff
}
13 голосов
/ 24 февраля 2011

Просто назови их разными вещами.Важная часть, которая помогает 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 голосов
/ 09 февраля 2016

Я столкнулся с этой ситуацией и обнаружил, что 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")) {
        ...
    }

Мне бы хотелосьлучший способ, но это все, с чем я мог работать.

...