我正在创建一个包含单个入口点类的多模块项目,但有一些问题,
我有两个模块: -
这是我的主要模块,
@ChildModule(moduleClass = MyChildModule.class)
public class MyMainModule implements EntryPoint {
@Override
public void onModuleLoad() {
Mvp4gModule module = (Mvp4gModule) GWT.create(Mvp4gModule.class);
module.createAndStartModule();
RootPanel.get().add((Widget) module.getStartView());
}
}
并创建了一个子模块,
public interface MyChildModule extends Mvp4gModule {
}
我的基础eventBus是,
@Events( startPresenter = HomePresenter.class,historyOnStart=true)
@ChildModules(@ChildModule(moduleClass=MyChildModule.class, async=true, autoDisplay=false ))
public interface BaseEventBus extends EventBusWithLookup {
@InitHistory
@Event(handlers = HomePresenter.class)
void init();
@Start
@Event(handlers = HomePresenter.class)
void start();
@Event(forwardToModules=MyChildModule.class)
void getContentBody();
@Event(handlers = HomePresenter.class)
void setContentBody(ContentBodyView contentBodyView);
}
和儿童活动巴士是,
@Events(module=MyChildModule.class, startPresenter = ContentBodyPresenter.class)
public interface MyChildEventBus extends EventBusWithLookup {
@Event(generate = ContentBodyPresenter.class)
void getContentBody();
@Event(forwardToParent=true)
void setContentBody(ContentBodyView contentBodyView);
}
HomePresenter,HomeView在MyMainModule和ContentBodyPresenter中,ContentBodyView来自MyChildModule。
@Presenter(view = HomeView.class)
public class HomePresenter extends BasePresenter<HomeView, BaseEventBus>{
getErrorBtn().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent arg0) {
eventBus.showError("Error");
}
});
}
上述演示者访问BaseEventBus和ContentBodyPresenter如下:
@Presenter(view = ContentBodyView.class)
public class ContentBodyPresenter extends BasePresenter<ContentBodyView, MyChildEventBus>{
getErrorBtn().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent arg0) {
eventBus.showError("Error");
}
});
}
如果我访问eventbus,如果我在上面指定了MyChildEventBus,它仍将访问BaseEventBus事件。为什么会这样。?
我继承了MyMainModule的gwt.xml中的MyChildModule,
<inherits name='abc.xyz.MyChildModule' />
如果我编译这个项目,我得到 MyChildModule的延迟绑定错误,控制台显示方法getContentBody:没有定义client.MyChildModule的实例。您是否忘记将其添加到事件总线接口的@ChildModules?。可能是什么问题。?上面的代码中是否有任何结构性缺陷。?
答案 0 :(得分:0)
查看您发布的代码,有两件事情是不必要的:
无需使用@ChildModule注释您的EntryPoint。这个 注释在BaseEventBus类中使用。
您不需要在模块描述符中继承mvp4g子模块。 Mvp4g的模块不依赖于GWT模块。这是完全不同的东西。
将@Event(generate = ContentBodyPresenter.class)
更改为@Event(handlers = ContentBodyPresenter.class)