У меня есть следующие классы:
// The "backing bean" for DashboardDisplay.ui.xml (which is omitted for brevity).
public class DashboardDisplay extends Composite implements AcceptsOneWidget {
private EventBus eventBus;
private PlaceController placeController;
private IsWidget content = null;
public DashboardDisplay(EventBus eventBus, PlaceController placeController) {
super();
setEventBus(eventBus);
setPlaceController(placeController);
}
// Getters and setters for all properties
// ...
@Override
public void setWidget(IsWidget widget) {
setContent(widget);
}
}
public class DashboardActivity extends AbstractActivity {
private AcceptsOneWidget container;
private ActivityManager manager;
private DashboardDisplay display;
public DashboardActivity(AcceptsOneWidget container, ActivityManager manager,
DashboardDisplay display) {
super();
setContainer(container);
setManager(manager);
setDisplay(display);
// I *believe* this ensures that the 'panel' passed in to the
// start method is always our 'container'. Yes?
manager.setDisplay(container);
}
// Getters and setters for all properties
// ...
@Override
public void start(AcceptsOneWidget panel, EventBus eventBus) {
display.setEventBus(eventBus);
panel.setWidget(display);
}
}
public class DashboardActivityMapper implements ActivityMapper {
private DashboardActivity activity = null;
// Getters and setter for activity.
@Override
public Activity getActivity(Place place) {
// Leaving arguments null because I'm confused about the object graph
// (read below).
return new DashboardActivity(null, null, null);
}
}
Итак, я начинаю иметь какое-то подобие понимания структуры Activity, но все еще настолько плохо знаком с ней, что, когда я пытаюсь отвлечься от примеров Hello, GWT , я почти мгновенно сталкиваюсь с препятствиями в API.
В основном модуле GWT моего приложения, MyWebAppModule
, я пытаюсь создать и настроить эти 3 объекта. Но поскольку я все еще не уверен, как использовать их API, у меня возникают проблемы с реализацией:
public class MyWebAppModule implements EntryPoint {
@Override
public void onModuleLoad() {
// I'll worry about DI and getting GIN to work after
// I figure this basic stuff out.
EventBus eventBus = new SimpleEventBus();
PlaceController placeController = new PlaceController(eventBus);
MyWebAppPlaceHistoryMapper placeMapper = new MyWebAppPlaceHistoryMapper();
HomePlace homePlace = new HomePlace();
// WHERE THE PROBLEM STARTS
DashboardActivityMapper activityMapper = new DashboardActivityMapper();
ActivityManager manager = new ActivityManager(activityMapper, eventBus);
// Really not sure how to inject/configure this properly.
DashboardActivity dashboardActivity = new DashboardActivity(null, null, null);
// WHERE THE PROBLEM ENDS
PlaceHistoryHandler historian = new PlaceHistoryHandler(placeMapper);
historian.register(placeController, eventBus, homePlace);
historian.handleCurrentHistory();
}
}
- Ясно, что я неправильно реализовал
DashboardActivityMapper
иDashboardActivity
, поэтому это вызывает проблемы, когда я пытаюсь создать и связать их экземпляры внутриMyWebAppModule#onModuleLoad
. Может ли кто-нибудь помочь мне реализовать это правильно? Как только я получу рабочий пример, я уверен, что смогу соединить остальные «точки» в структуре Activity. - Если я что-то не упустил,
ActivityManager manager
выше, похоже, не добавляется ни к какому другому классу. Это правильно? Будет ли GWT гарантировать, что он останется в памяти, чтобы он всегда прослушивалeventBus
я передаю его дляPlaceChangeEvent
s? Или мне нужно что-то добавить/зарегистрировать?
Заранее спасибо!