【问题标题】:How to use ancestor's EventBus if I am extending Widget in GWT?如果我在 GWT 中扩展 Widget,如何使用祖先的 EventBus?
【发布时间】:2011-12-12 09:04:55
【问题描述】:

我正在扩展 ScrollPanel 并希望使用这个新小部件处理我自己的自定义事件。

我用fireEvent(MyEvent event)HandlerRegistration addMyHandler(MyHandler handler)两种方法制作了自己的HasMyHandlers接口。

首先我创建了一个私有成员SimpleEventBus eventBus,但接下来我认为祖先类应该已经有了它自己的副本。

是否可以使用祖先的事件总线,即在其中注册处理程序并根据它触发它们?

【问题讨论】:

    标签: java events gwt customization


    【解决方案1】:

    是的,这是可能的。执行此操作的标准方法是在 HandlerRegistration addMyHandler(MyHandler handler) 的实现中是:

    public class MyWidget extends Widget implements HasMyHandlers {
    
      @Override
      public HandlerRegistration addMyHandler(MyHandler handler) { 
        return addHandler(handler, MyEvent.getType());
      }
    
      // Other methods
    }
    

    Widget.addHandler(...) 方法提供了将自定义事件处理程序连接到 Widget 的 HandlerManager 的机制。

    要向所有已注册的处理程序触发事件,请使用Widget.fireEvent(...) 方法。因此,要触发您的活动,您可以这样做:

    fireEvent(new MyEvent(yourEventData));
    

    值得注意的是,您的事件还应该扩展 GwtEvent 类。

    【讨论】:

    • 但是当它发生时如何向所有注册的处理程序触发事件呢?
    • @Dims 我在回答中添加了更多细节。
    • 谢谢。但是由于 Widget.fireEvent 接受 GwtEvent 类型的参数,这意味着我必须用我的事件扩展类,对吧?
    • 要使用Widget.fireEvent,你必须扩展它。但它是一个方便的类,有几个有用的事件相关方法。查看文档。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多