我正在使用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()?
答案 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)
让您的SearchDialogBox扩展BaseEventHandler:
SearchDialogBox extends BaseEventHandler<YOUR_EVENT_BUS>
对于DialogBox,使用合成而不是继承,因为现在您的SearchDialogBox扩展了BaseEventHandler
在您的YOUR_EVENT_BUS中创建至少一个应在SearchDialogBox中处理的方法
例如在YOUR_EVENT_BUS中:
@Event(handlers = {SearchDialogBox.class}) void helloWorld();
和SearchDialogBox
`public void onHelloWorld(){...}`