hashandlers在gwt中意味着什么

Dea*_*eam 5 java events gwt handler

我无法理解Has****HandlersGWT 中接口的含义.如果一个类实现HasClickHandlers(addClickHandler)和ClickHandler(onClick)接口会有什么不同.

谢谢

Ber*_*t F 7

HasClickHandlers - 可以点击的东西,例如按钮

ClickHandler - 一些处理点击的代码

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


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

HasClickHandlers getSaveButton();
Run Code Online (Sandbox Code Playgroud)

而不是简单的

Button getSaveButton();
Run Code Online (Sandbox Code Playgroud)

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

通过使接口返回HasClickHandler代替Button,用于演示单元测试代码可以完全从所述UI框架的复杂性通过简单地嘲笑接口喜欢解耦HasClickHandler.这意味着更简单的测试脚手架非常快速的单元测试(因为您没有初始化/与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.谷歌只是提供HasClickHandlers界面作为一种替代方式来声明对按钮等一些小部件的变量引用.这些小部件将通知已注册ClickHandler的按钮单击.

您的类ABC可能实现ClickHandler或可能包含派生自的内部(可能的匿名)类ClickHandler.典型用法如下:

public class ABC {
     ...    
     getSaveButton().addClickHandler(
        new ClickHandler() {
            public void onClick(ClickEvent event) {
               saveToDatabase();
            }
        }
     }
     ...
Run Code Online (Sandbox Code Playgroud)