Изменить порядок обработки событий в GWT - PullRequest
0 голосов
/ 30 декабря 2011

У меня есть окно предложений, в котором есть 2 гадлера: SelectionHandler для выбора элементов в SuggestionList и keyDownHandler на TextBox из SuggestBox.Я хочу запретить действие по умолчанию для события (например, при нажатии Enter), когда в данный момент отображается список предложений.Проблема в том, что SelectionEvent всегда срабатывает до KeyDownEvent, а список предложений закрывается после срабатывания SuggestionEvent, поэтому в KeyDownEventHandler список предложений уже закрыт.И я не могу использовать действие предотвращения по умолчанию при вводе с проверкой списка предложений, который выглядит следующим образом:

if ((nativeCode == KeyCodes.KEY_TAB || nativeCode == KeyCodes.KEY_ENTER) && display.isSuggestionListShowing()) {
     event.preventDefault();
}

, где display.isSuggestionListShowing() - это метод, который вызывает isShowing для SuggestBox.Так как же в этом случае изменить порядок обработки событий (Selection до KeyDown на keyDown до Selection)?

1 Ответ

2 голосов
/ 31 декабря 2011

Я предполагаю, что вы имеете в виду SuggestBox вместо SuggestionList, так как в jar-файле gwt-user нет класса с таким именем.

SuggestBox использует событие keydown для предоставления SelectEvent - если он не может видеть изменение клавиш (из браузера, который фактически подхватывает действие пользователя), он не может предоставить событие логического выбора.

Это означает, что изменение порядка событий на самом деле не имеет смысла - вы не можете иметь эффект до причины. Во многих случаях браузер генерирует события в определенном порядке, и изменить это невозможно, поэтому вам нужно по-другому взглянуть на проблему.

(Также стоит отметить, что protectDefault () только запрещает браузеру вести себя по умолчанию - другие обработчики будут работать как обычно.)

Одним из вариантов будет предварительный просмотр всех событий до того, как они попадут в SuggestBox, и в некоторых случаях отмена события - посмотрите, как это можно сделать в com.google.gwt.user.client.Event.addNativePreviewHandler(NativePreviewHandler).

Я не вижу других вариантов сразу - вся действующая логика обработки нажатия клавиш обернута во внутренний класс в приватном методе com.google.gwt.user.client.ui.SuggestBox.addEventsToTextBox(), не оставляя вариантов для его переопределения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...