我正在构建一个大型应用程序,我想将其拆分为几个模块,例如用于初始化的核心模块、用户管理等……、客户模块、生产模块等……</p>
我想将它拆分为多个 GWT 模块(不使用 GWT 拆分技术)并共享一个 EventBus 来广播一些事件,例如 LoginEvent、LogoutEvent。我不想使用代码拆分技术,因为我想减少编译时间并只重新编译我修改过的模块。这还允许通过注释 HTML 主机页面中的脚本标记来启用或禁用模块。
我使用 JSNI 编写了以下代码:
CoreModule’s EntryPoint:
private static SimpleEventBus eventBus = null;
public void onModuleLoad() {
export();
getEventBus().addHandler(MyEvent.TYPE, new MyEventHandler() {
@Override
public void onEvent(MyEvent myEvent) {
Window.alert(myEvent.getMessage());
}
});
}
public static SimpleEventBus getEventBus() {
if (eventBus == null)
eventBus = new SimpleEventBus();
return eventBus;
}
public static native void export() /*-{
$wnd.getEventBus = $entry(@testExporter.client.TestExporter::getEventBus());
}-*/;
CustomerModule’s EntryPoint:
public void onModuleLoad() {
Button button = new Button("Click me");
button.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
getEventBus().fireEvent(new MyEvent("Button clicked !"));
}
});
RootPanel.get().add(button);
}
public static native SimpleEventBus getEventBus() /*-{
// Create a useless eventBus because the GWT compiler make a call to a null instance
var eventBus = @com.google.gwt.event.shared.SimpleEventBus::new()();
eventBus = $wnd.getEventBus();
return eventBus;
}-*/;
但是在浏览器中执行时,我在 Firebug 中有以下异常:
uncaugth exception [object Object]
我还复制了实现/接口客户事件的 MyEvent 和 MyEventHandler 类。
PS:我也知道包含注释其他模块引用以避免编译它的技术。