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)