【问题标题】:what does hashandlers mean in gwthashhandlers 在 gwt 中是什么意思
【发布时间】:2011-01-17 21:14:48
【问题描述】:

我无法理解 GWT 中 Has****Handlers 接口的含义。如果一个类实现HasClickHandlers (addClickHandler) 和ClickHandler (onClick) 接口会有什么区别。

谢谢

【问题讨论】:

    标签: java events gwt handler


    【解决方案1】:

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

    ClickHandler - 一些点击处理的代码

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


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

    HasClickHandlers getSaveButton();
    

    而不是简单

    Button getSaveButton();
    

    Google 提倡将视图与演示者分离。演示者通常很少关心按钮的所有功能——它通常只关心按钮是可以接受点击处理程序并使用它的东西。像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 方法作用于点击事件,并且 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();
                }
            }
         }
         ...
    

    【讨论】:

    • 好的,例如如果 ABC 类实现 Hasclickhandlers 和 Clickhandler,然后实现 onClick 和 addClickHandler(返回 HandlerRegistration),这意味着 1)它将通过 onClick 方法作用于点击事件,并且 2)将让任何其他类知道(谁在实现 ClickHandler 和使用 ABC 类的 addClickHandler 来注册事件)点击刚刚发生?对吗?
    【解决方案2】:

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

    例如,一个按钮会产生一个点击事件。当您想要处理单击事件时,您需要创建一个包含执行此操作的代码的 ClickHandler。您将这个 ClickHandler 注册到 Button 对象,以便当点击发生时,Button 知道该告诉谁。 HasClickHandlers接口由Button实现(通过FocusWidget父类),就是注册ClickHandlers的接口。这个接口简单的标准化了ClickHandlers的注册。

    【讨论】:

      猜你喜欢
      • 2011-08-12
      • 2017-06-11
      • 2018-03-05
      • 2023-03-27
      • 2016-08-17
      • 2010-12-28
      • 2020-10-27
      • 2013-03-09
      • 2015-07-15
      相关资源
      最近更新 更多