2011-01-17 9 views

Respuesta

7

HasClickHandlers - algo que se puede hacer clic, p. Ej. un botón

ClickHandler - un código que maneja en un clic

Un objeto HasClickHandlers es un widget, como un botón, que puede reaccionar cuando el usuario hace clic en él. Pero un botón por sí solo no sabe qué debería suceder cuando un usuario hace clic en él. Un desarrollador puede crear un objeto ClickHandler, que es un código que implementa lo que debería suceder cuando el usuario hace clic en ese botón. Se puede dar un ClickHandler a un botón para reaccionar al clic del usuario, es decir, el botón puede tener/mantener un controlador de clic - HasClickHandlers.


Uno puede preguntarse por qué decir GWT aplicaciones deben definir las interfaces de vista con firmas de métodos como:

HasClickHandlers getSaveButton(); 

en lugar de simplemente

Button getSaveButton(); 

defensores de Google desacoplamiento de la vista desde presentador. Al presentador generalmente le importa muy poco la funcionalidad de un botón; por lo general, solo le importa que el botón sea algo que pueda tomar un control de clic y usarlo. Una interfaz como HasClickHandler tiene muy pocos métodos y es muy fácil de simular. Sin embargo, usar un botón real a veces requerirá inicializar parte o la totalidad del marco de la UI y crear instancias de clases de contexto de requisitos previos para crear un botón para probar.

Al tener el retorno interfaz HasClickHandler lugar Button, el código de prueba de unidad para el presentador puede desacoplar por completo de la complejidad del marco de interfaz de usuario simplemente burlarse de las interfaces como HasClickHandler. Esto significa andamios de prueba más simples y pruebas de unidades muy rápidas (ya que no tiene la sobrecarga de inicializar/interactuar con un marco de interfaz de usuario).

http://googletesting.blogspot.com/2009/08/tott-testing-gwt-without-gwttest.html


Editar

OP pregunta:

bien, por ejemplo, si la clase ABC implementa Hasclickhandlers y Clickhandler y luego onClick y addClickHandler (que devuelve HandlerRegistration), significa que 1) actuará al hacer clic en el evento mediante el método onClick y 2) informará a cualquier otra clase (quién está implementando ClickHandler y se usó addClickHandler de la clase ABC para registrar el evento) ¿se ha producido el clic? ¿derecho?

Sus clases como ABC no implementarán HasClickHandlers. Solo los widgets GWT como los botones implementan HasClickHandlers. Google simplemente proporciona la interfaz HasClickHandlers como una forma alternativa de declarar referencias de variables a algunos widgets como botones. Estos widgets notificarán ClickHandler registrado sobre un clic de botón.

Su clase ABC puede implementar ClickHandler o puede contener una clase interna (posible anónima) que se deriva de ClickHandler. Un uso típico se ve así:

public class ABC { 
    ...  
    getSaveButton().addClickHandler(
     new ClickHandler() { 
      public void onClick(ClickEvent event) { 
       saveToDatabase(); 
      } 
     } 
    } 
    ... 
+0

vale, p. si la clase ABC implementa Hasclickhandlers y Clickhandler y luego onClick y addClickHandler (que devuelve HandlerRegistration), significa que 1) actuará al hacer clic en el evento mediante el método onClick y 2) informará a cualquier otra clase (quién está implementando ClickHandler y se usó addClickHandler de la clase ABC para registrar el evento) ¿se ha producido el clic? ¿derecho? – Deam

+0

@ user330281 - ver la edición –

2

Los HasClickHandlers es para los objetos que generan eventos de clic. ClickHandler es para objetos que se ocupan de los eventos.

Por ejemplo, un botón generará un evento de clic. Cuando desea manejar un evento de clic, crea un ClickHandler que contiene el código que lo hace. Usted registra este ClickHandler con el objeto Button para que cuando ocurra un clic, el Button sepa a quién contarle. La interfaz HasClickHandlers se implementa mediante Button (a través de la clase principal de FocusWidget) que es solo la interfaz para registrar ClickHandlers. Esta interfaz simplemente estandariza el registro de ClickHandlers.