2011-01-17 8 views
5

Nie mogę zrozumieć znaczenia interfejsów Has****Handlers w GWT. Jaka będzie różnica, jeśli klasa implementuje interfejsy HasClickHandlers (addClickHandler) i ClickHandler (onClick).co oznacza hashandlers w gwt

dziękuję

Odpowiedz

7

HasClickHandlers - coś, co można kliknąć, np. przycisk

ClickHandler - jakiś kod, który obsługuje na kliknięcie

HasClickHandlers obiekt jest widget, jak przycisk, który może reagować, gdy użytkownik kliknie na nim. Ale przycisk sam w sobie nie wie, co powinno się stać, gdy użytkownik go kliknie. Deweloper może wytworzyć obiekt ClickHandler, który jest kodem implementującym to, co powinno się stać, gdy użytkownik kliknie na ten przycisk. Przyciskowi można nadać ClickHandler, aby zareagować na kliknięcie użytkownika, tj. Przycisk może mieć/przytrzymać przycisk obsługi kliknięcia - HasClickHandlers.


Ktoś może zapytać dlaczego GWT powiedzieć aplikacje powinny określić zobacz interfejsy z podpisami metody takie jak:

HasClickHandlers getSaveButton(); 

zamiast po prostu

Button getSaveButton(); 

rzeczników Google oddzielenie widok z prezenterem. Prezenter zwykle dba bardzo niewiele o całą funkcjonalność przycisku - zwykle dba tylko o to, że przycisk jest czymś, co może zająć się obsługą kliknięcia i użyć go. Interfejs taki jak HasClickHandler ma bardzo mało metod i jest bardzo łatwy do udawania. Jednak użycie prawdziwego przycisku wymaga czasami inicjowania części lub całości całego interfejsu interfejsu użytkownika i tworzenia instancji klas kontekstowych w celu utworzenia przycisku do testowania.

Poprzez powrotu interfejsu HasClickHandler zamiast Button, kod testowy urządzenie do zespołu podającego może całkowicie oddzielić od złożoności ram UI wystarczy drwi interfejsy jak HasClickHandler. Oznacza to prostsze testowanie rusztowań i bardzo szybkich testów jednostkowych (ponieważ nie masz narzutu inicjowania/interakcji ze strukturą interfejsu użytkownika).

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


Edycja

PO pyta

ok np jeśli klasa ABC implementuje Hasclickhandlers i Clickhandler, a następnie onClick i addClickHandler (która zwraca HandlerRegistration), oznacza to, że 1) będzie działać na zdarzeniu kliknięcia poprzez metodę onClick, a 2) powiadomi każdą inną klasę (kto implementuje ClickHandler i użył addClickHandler klasy ABC do zarejestrowania zdarzenia), które zostało właśnie kliknięte? dobrze?

klasach jak ABC nie wdroży HasClickHandlers. Tylko widżety GWT, takie jak przyciski, implementują HasClickHandlers. Google podaje po prostu interfejs HasClickHandlers jako alternatywny sposób deklarowania zmiennych odwołań do niektórych widżetów, takich jak przyciski. Te widgety powiadomią zarejestrowanego użytkownika o numerze ClickHandler o kliknięciu przycisku.

Twoja klasa ABC może implementować ClickHandler lub zawierać wewnętrzną (możliwą anonimową) klasę, która wywodzi się z ClickHandler. Typowe zastosowanie wygląda następująco:

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

ok, np. jeśli klasa ABC implementuje Hasclickhandlers i Clickhandler, a następnie onClick i addClickHandler (która zwraca HandlerRegistration), oznacza to, że 1) będzie działać na zdarzeniu kliknięcia poprzez metodę onClick, a 2) powiadomi każdą inną klasę (kto implementuje ClickHandler i użył addClickHandler klasy ABC do zarejestrowania zdarzenia), które zostało właśnie kliknięte? dobrze? – Deam

+0

@ user330281 - patrz edycja –

2

The HasClickHandlers jest dla obiektów, które generują zdarzenia kliknięcia. ClickHandler przeznaczony jest dla obiektów zajmujących się zdarzeniami.

Na przykład przycisk wygeneruje zdarzenie kliknięcia. Aby obsłużyć zdarzenie click, należy utworzyć ClickHandler zawierający kod, który to robi. Rejestrujesz ten ClickHandler za pomocą obiektu Button, aby po kliknięciu Button wiedział, komu o nim powiedzieć. Interfejs HasClickHandlers jest zaimplementowany przez Button (poprzez klasę rodzica FocusWidget), który jest tylko interfejsem do rejestrowania ClickHandlers. Ten interfejs po prostu standaryzuje rejestrację ClickHandlers.