Я создаю большое приложение, и я хотел бы разделить его на несколько модулей, таких как основной модуль для инициализации, управления пользователями и т. д., клиентский модуль, производственный модуль и т. д.
Я хочу разделить его на несколько модулей GWT (без использования техники разделения GWT) и поделиться EventBus для трансляции некоторых событий, таких как LoginEvent, LogoutEvent. Я не хочу использовать метод разделения кода, потому что я хочу сократить время компиляции и перекомпилировать только тот модуль, который я изменил. Это позволяет также включать или отключать модуль, комментируя тег script на главной странице 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, которые реализуют/взаимодействуют с клиентским событием.
P.S.: Я также знаю технику, заключающуюся в том, чтобы комментировать ссылки на другие модули, чтобы избежать их компиляции.