что хэш-хендлеры значат в gwt - PullRequest
5 голосов
/ 18 января 2011

Я не могу понять значение Has****Handlers интерфейсов в GWT.Какая разница, если класс реализует интерфейсы HasClickHandlers (addClickHandler) и ClickHandler (onClick).

спасибо

Ответы [ 2 ]

7 голосов
/ 18 января 2011

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();
            }
        }
     }
     ...
2 голосов
/ 18 января 2011

HasClickHandlers предназначен для объектов, которые генерируют события щелчка. ClickHandler для объектов, которые имеют дело с событиями.

Например, кнопка сгенерирует событие щелчка. Когда вы хотите обработать событие click, вы создаете ClickHandler, который содержит код, который делает это. Вы регистрируете этот ClickHandler с помощью объекта Button, чтобы в случае нажатия кнопки Button знал, кому об этом сообщить. Интерфейс HasClickHandlers реализован с помощью Button (через родительский класс FocusWidget), который является просто интерфейсом для регистрации ClickHandlers. Этот интерфейс просто стандартизирует регистрацию ClickHandlers.

...