hashandlers在gwt中意味着什么

时间:2011-01-17 21:14:49

标签: java events gwt handler

我无法理解GWT中Has****Handlers接口的含义。如果类实现HasClickHandlersaddClickHandler)和ClickHandleronClick)接口,会有什么不同。

谢谢

2 个答案:

答案 0 :(得分:7)

HasClickHandlers - 可以点击的内容,例如一个按钮

ClickHandler - 点击处理的一些代码

HasClickHandlers对象是一个小部件,就像一个按钮,可以在用户点击它时作出反应。但是按钮本身并不知道当用户点击它时会发生什么。开发人员可以创建一个ClickHandler对象,这是一些代码,用于实现用户单击该按钮时应该发生的事情。可以给一个按钮ClickHandler以响应用户的点击,即按钮可以拥有/保持点击处理程序 - HasClickHandlers


有人可能会问为什么GWT说应用程序应该定义具有方法签名的视图接口,如:

HasClickHandlers getSaveButton();

而不是简单

Button getSaveButton();
谷歌主张将观点与主持人脱钩。演示者通常非常关心按钮的所有功能 - 它通常只关心按钮是否可以使用点击处理程序并使用它。像HasClickHandler这样的界面只有很少的方法,很容易模拟。但是,使用真实按钮有时需要初始化整个UI框架的一些或部分,并实例化先决条件上下文类,以便创建一个测试按钮。

通过让接口返回HasClickHandler而不是Button,演示者的单元测试代码可以通过简单地模拟HasClickHandler等接口来完全脱离UI框架的复杂性。这意味着更简单的测试脚手架非常快速的单元测试(因为您没有初始化/与UI框架交互的开销)。

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


<强> 修改

OP问道:

  好的,例如如果ABC类实现Hasclickhandlers和Clickhandler然后onClick和addClickHandler(返回HandlerRegistration),则意味着1)它将通过onClick方法对click事件起作用,2)将让任何其他类知道(谁正在实现ClickHandler和使用了ABC类的addClickHandler注册事件)刚刚发生了点击?正确?

ABC这样的课程不会实现HasClickHandlers。只有像按钮这样的GWT小部件才能实现HasClickHandlers。 Google只是提供HasClickHandlers接口作为声明对某些小部件(如按钮)的变量引用的替代方法。这些小部件将通知已注册的ClickHandler按钮点击。

您的班级ABC可能会实现ClickHandler,或者可能包含一个源自ClickHandler的内部(可能的匿名)类。典型用法如下:

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

答案 1 :(得分:2)

HasClickHandlers用于生成点击事件的对象。 ClickHandler用于处理事件的对象。

例如,Button会生成一个click事件。如果要处理单击事件,可以创建一个包含执行此操作的代码的ClickHandler。您使用Button对象注册此ClickHandler,以便在发生单击时,Button知道要告诉它的人。 HasClickHandlers接口由Button(通过FocusWidget父类)实现,它只是注册ClickHandlers的接口。该接口简单地标准化了ClickHandlers的注册。