HasClickHandlers
- то, на что можно нажать, например, кнопка
ClickHandler
- некоторый код, который обрабатывает клик
Объект HasClickHandlers
- это виджет, похожий на кнопку, который может реагировать, когда пользователь нажимает на него. Но кнопка сама по себе не знает, что должно произойти, когда пользователь нажимает на нее. Разработчик может создать объект ClickHandler
, который представляет собой некоторый код, который реализует то, что должно произойти, когда пользователь нажимает на эту кнопку. Кнопке может быть дано ClickHandler
, чтобы реагировать на щелчок пользователя, то есть кнопка может иметь / удерживать обработчик щелчка - HasClickHandlers
.
Можно спросить, почему GWT говорит, что приложения должны определять интерфейсы представления с сигнатурами методов, такими как:
HasClickHandlers getSaveButton();
вместо простого
Button getSaveButton();
Google выступает за отделение представления от докладчика. Обычно докладчик очень мало заботится обо всех функциях кнопки - обычно он заботится только о том, чтобы кнопка могла обработать щелчок и использовать его. Интерфейс, такой как HasClickHandler
, имеет очень мало методов и очень легко подделать. Однако использование реальной кнопки иногда требует инициализации части или части всей инфраструктуры пользовательского интерфейса и создания экземпляров обязательных классов контекста для создания кнопки для тестирования.
Имея интерфейс, возвращающий HasClickHandler
вместо Button
, код модульного теста для докладчика может полностью отделиться от сложности инфраструктуры пользовательского интерфейса с помощью простого моделирования интерфейсов, таких как HasClickHandler
. Это означает более простые тестовые леса и очень быстрые модульные тесты (поскольку у вас нет накладных расходов на инициализацию / взаимодействие с каркасом пользовательского интерфейса).
http://googletesting.blogspot.com/2009/08/tott-testing-gwt-without-gwttest.html
Редактировать
ОП спрашивает:
хорошо, например если класс ABC реализует Hasclickhandlers и Clickhandler, а затем onClick и addClickHandler (который возвращает HandlerRegistration), это означает, что 1) он будет воздействовать на событие click через метод onClick и 2) сообщит любому другому классу (ам), который реализует ClickHandler и использовал addClickHandler класса ABC для регистрации события) что щелчок только что произошел? право?
Ваши классы типа ABC
не будут реализовывать HasClickHandlers
. Только виджеты GWT, такие как кнопки, реализуют HasClickHandlers
. Google просто предоставляет интерфейс HasClickHandlers
в качестве альтернативного способа объявления переменных переменных для некоторых виджетов, таких как кнопки. Эти виджеты будут уведомлять зарегистрированных ClickHandler
о нажатии кнопки.
Ваш класс ABC
может реализовывать ClickHandler
или может содержать внутренний (возможно, анонимный) класс, производный от ClickHandler
. Типичное использование выглядит так:
public class ABC {
...
getSaveButton().addClickHandler(
new ClickHandler() {
public void onClick(ClickEvent event) {
saveToDatabase();
}
}
}
...