В GWT есть способ создать KeyPressEvent для всего представления вместо одного элемента ввода? - PullRequest
5 голосов
/ 08 марта 2012

Прямо сейчас у меня работает следующий код:

@UiHandler("usernameTextBox")
void onUsernameTextBoxKeyPress(KeyPressEvent event) {
    keyPress(event);
}

@UiHandler("passwordTextBox")
void onPasswordTextBoxKeyPress(KeyPressEvent event) {
    keyPress(event);
}

void keyPress(KeyPressEvent event) {
    if (event.getNativeEvent().getKeyCode() == KeyCodes.KEY_ENTER) {
        submit();
    }
}

Мне бы хотелось иметь возможность иметь только одного слушателя для всех элементов в представлении без дублирования события для каждого текстового поля.

Конечная цель заключается в том, что, если они нажимают клавишу ввода, независимо от того, где они находятся на странице, она должна отправить форму.

Спасибо!

Ответы [ 3 ]

7 голосов
/ 08 марта 2012

Что работает, но все равно требует, чтобы вы указали его для каждого виджета, но не требует дубликата кода:

@UiHandler({"usernameTextBox", "passwordTextBox"})
void onPasswordTextBoxKeyPress(KeyPressEvent event) {
    keyPress(event);
}
2 голосов
/ 19 апреля 2012

Да, домкраты правильные. Также вы можете попробовать следующее. Это может быть VerticalPanel, DockLayoutPanel и т. Д.

UiBinder.ui.xml

<gwt:VerticalPanel ui:field="mainPanel">
    <gwt:Label>Name</gwt:TextBox>
    <gwt:TextBox ui:field="textBox">
</gwt:VerticalPanel>

Main.java

@UiField
VerticalPanel mainPanel;

public Main() {
  focushandler();
}

void focusHandler() { 
    mainPanel.addDomHandler(new Handler(), KeyPressEvent.getType());
}

final class Handler implements KeyPressHandler {

    @Override
    public void onKeyPress(KeyPressEvent event) {
        //Code what you expect
    }
}

На самом деле это имеет большее количество строк. Но это хорошая практика.

С уважением, Gnik

1 голос
/ 21 марта 2012

Я обнаружил, что g: FocusPanel позволяет мне захватывать события для всего внутри панели.

@UiHandler("focusPanel")
void onFocusPanelKeyPress(KeyPressEvent event) {
    if (event.getNativeEvent().getKeyCode() == KeyCodes.KEY_ENTER) {
        submit();
    }
}
...