2011-01-17 3 views
5

GWT의 Has****Handlers 인터페이스의 의미를 이해할 수 없습니다. 클래스가 HasClickHandlers (addClickHandler) 및 ClickHandler (onClick) 인터페이스를 구현하는 경우 차이점은 무엇입니까? 핸들러가 의미하는 바는 무엇입니까

는 클릭 이벤트를 생성하는 객체에 대한 당신

답변

7

HasClickHandlers - 클릭 할 수있는 것 (예 : 버튼

ClickHandler - 클릭

HasClickHandlers 개체를 처리하는 코드는 사용자가 클릭 할 때 반응 할 수있는 버튼과 같은 위젯,이다. 그러나 버튼 자체는 사용자가 클릭 할 때 어떤 일이 발생해야하는지 알지 못합니다. 개발자는 ClickHandler 개체를 만들 수 있습니다.이 개체는 사용자가 해당 단추를 클릭 할 때 발생해야하는 동작을 구현합니다. 버튼에 ClickHandler이 지정되어 사용자의 클릭에 반응 할 수 있습니다. 즉, 버튼에 클릭 핸들러가있을 수 있습니다 (HasClickHandlers). 발표자에서보기 디커플링

HasClickHandlers getSaveButton(); 

대신 단순히

Button getSaveButton(); 

구글 지지자 : GWT 응용 프로그램과 같은 방법 서명을보기 인터페이스를 정의해야한다고 않는 이유


하나는 요청할 수 있습니다. 발표자는 대개 버튼의 모든 기능을 거의 신경 쓰지 않습니다. 일반적으로 버튼은 클릭 핸들러를 사용하여 사용할 수있는 것입니다. HasClickHandler과 같은 인터페이스는 매우 적은 메소드를 가지고 있으며 모의하기가 매우 쉽습니다. 그러나 실제 버튼을 사용하면 테스트를위한 버튼을 만들기 위해 전체 UI 프레임 워크 중 일부 또는 일부를 초기화하고 전제 조건 클래스를 인스턴스화해야 할 수도 있습니다.

대신 Button를 인터페이스 창 HasClickHandler를 구비함으로써, 표현의 단위 테스트 코드는 단순히 HasClickHandler 같은 인터페이스를 조롱하여 UI 프레임 워크의 복잡성을 완전히 분리 할 수있다. 즉, 간단한 테스트 스 캐 폴딩 매우 빠른 단위 테스트 (UI 프레임 워크를 초기화/상호 작용하는 오버 헤드가 없으므로)를 의미합니다.

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


편집

영업 이익은 묻는다 :

확인, 예를 ABC 클래스가 Hasclickhandlers 및 Clickhandler를 구현하고 onClick 및 addClickHandler (HandlerRegistration을 반환 함)를 구현하는 경우 이는 1) click 이벤트에서 onClick 메서드를 통해 작동하고 2) 다른 클래스가 (ClickHandler 및 ABC 클래스의 addClickHandler를 사용하여 이벤트를 등록) 클릭이 방금 발생 했습니까? 권리?

ABC과 같은 클래스는 HasClickHandlers을 구현하지 않습니다. 버튼과 같은 GWT 위젯 만 HasClickHandlers을 구현합니다. Google은 버튼과 같은 일부 위젯에 변수 참조를 선언하는 대체 방법으로 HasClickHandlers 인터페이스를 제공하기 만합니다. 이 위젯은 등록 된 ClickHandler에 버튼 클릭에 대해 알립니다.

클래스 ABCClickHandler을 구현하거나 ClickHandler에서 파생 된 내부 (가능한 익명) 클래스를 포함 할 수 있습니다. 일반적인 사용법은 다음과 같습니다.

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

예 : ABC 클래스가 Hasclickhandlers 및 Clickhandler를 구현하고 onClick 및 addClickHandler (HandlerRegistration을 반환 함)를 구현하는 경우 이는 1) click 이벤트에서 onClick 메서드를 통해 작동하고 2) 다른 클래스가 (ClickHandler 및 ABC 클래스의 addClickHandler를 사용하여 이벤트를 등록) 클릭이 방금 발생 했습니까? 권리? – Deam

+0

@ user330281 - 편집 참조 –

2

HasClickHandlers 감사합니다. ClickHandler는 이벤트를 처리하는 객체 용입니다.

예를 들어, 버튼은 클릭 이벤트를 생성합니다. 클릭 이벤트를 처리하려는 경우이를 수행하는 코드가 포함 된 ClickHandler를 만듭니다. 이 ClickHandler를 Button 객체에 등록하면 클릭이 발생했을 때 버튼이이를 알릴 수 있습니다. HasClickHandlers 인터페이스는 ClickHandlers를 등록하기위한 인터페이스 인 Button (FocusWidget 부모 클래스를 통해)에 의해 구현됩니다. 이 인터페이스는 단순히 ClickHandlers의 등록을 표준화합니다.

관련 문제