多模块项目中的延迟绑定以及访问eventBus时的问题

时间:2016-06-01 08:40:06

标签: gwt event-handling multi-module event-bus mvp4g

我正在创建一个包含单个入口点类的多模块项目,但有一些问题,

我有两个模块: -

这是我的主要模块,

@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?。可能是什么问题。?上面的代码中是否有任何结构性缺陷。?

1 个答案:

答案 0 :(得分:0)

查看您发布的代码,有两件事情是不必要的:

  1. 无需使用@ChildModule注释您的EntryPoint。这个 注释在BaseEventBus类中使用。

  2. 您不需要在模块描述符中继承mvp4g子模块。 Mvp4g的模块不依赖于GWT模块。这是完全不同的东西。

  3. @Event(generate = ContentBodyPresenter.class)更改为@Event(handlers = ContentBodyPresenter.class)