如何在GWTP中使用EventBus用于非Presenter类?

时间:2013-10-17 16:46:43

标签: gwt gwtp event-bus

我正在使用GWTP平台&用于构建webapp的eClipse。在Eclipse中,创建Presenter时,它将创建3个文件(例如:SearchPresenter.java,SearchView.java和& SearchView.ui.xml):

public class SearchView extends ViewImpl implements SearchPresenter.MyView

public class SearchPresenter extends
    Presenter<SearchPresenter.MyView, SearchPresenter.MyProxy>{
    ....
    private EventBus eventBus;
    @Inject
    public SearchPresenter(final EventBus eventBus, final MyView view) {
         super(eventBus, view);
        this.eventBus=eventBus;
    }
}

要使用eventBus,我们只需使用eclipse创建EventBus文件,从MyEvent.java开始,然后我们使用以下代码在SearchPresenter中调用eventBus:

MyEvent mEvent=new MyEvent();
SearchPresenter.this.eventBus.fireEvent(mEvent);

现在假设我有一个非演示者类public class SearchDialogBox extends DialogBox,那么我的问题是如何在SearchDialogBox中使用MyEvent?如何在SearchDialogBox中获取事件Bus()?

3 个答案:

答案 0 :(得分:1)

我不使用GWTP,但我想以下是可以的。

@Inject private EventBus eventBus

应该可以工作(如果你不立即在SearchDialogBox构造函数中使用它)。

否则尝试找出GWTP中哪个类扩展com.google.gwt.inject.client.Ginjector。假设它被称为“MyInjector”,只需写:

private EventBus eventBus = MyInjector.INSTANCE.getEventBus();

答案 1 :(得分:0)

查看https://github.com/ArcBees/GWTP/wiki/Events

您基本上实现HasHandlers接口注入EventBus

答案 2 :(得分:0)

  1. 让您的SearchDialogBox扩展BaseEventHandler:

    SearchDialogBox extends BaseEventHandler<YOUR_EVENT_BUS>    
    
  2. 对于DialogBox,使用合成而不是继承,因为现在您的SearchDialogBox扩展了BaseEventHandler

  3. 使用@EventHandler注释您的SearchDialogBox(如果需要,还可以注释@Singleton)
  4. 在您的YOUR_EVENT_BUS中创建至少一个应在SearchDialogBox中处理的方法

    • 例如在YOUR_EVENT_BUS中:

      @Event(handlers = {SearchDialogBox.class}) void helloWorld();

      和SearchDialogBox

      `public void onHelloWorld(){...}`