0

私は次のクラスを持っています:

// 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);
    }
}

そのため、Activitiesフレームワークをある程度理解し始めていますが、それでも非常に新しいため、 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();
    }
}
  1. 明らかに、私は正しく実装DashboardActivityMapperしていないDashboardActivityので、インスタンスをインスタンス化して内部にワイヤリングしようとすると問題が発生しますMyWebAppModule#onModuleLoad。誰かが私がこれを正しく実装するのを手伝ってもらえますか?実用的な例を見つけたら、アクティビティフレームワークの残りの「ドット」を接続できると確信しています。
  2. 私が何かを逃していない限り、ActivityManager manager上記は他のクラスに追加されていないようです。これは正しいです?GWTは、メモリ内で存続していることを確認して、常にリッスンしていることを確認しeventBusますPlaceChangeEventか?または、何かに追加/登録する必要がありますか?

前もって感謝します!

4

1 に答える 1

0
  1. あなたは、与えられた場所(例えば)に到達DashboardActivityMapperしたときにを作成して返す責任があります。これはあなたが見逃している情報ですか?https://developers.google.com/web-toolkit/doc/latest/DevGuideMvpActivitiesAndPlaces#ActivityMapper を参照してくださいDashboardActivityHomePlace

  2. EventBusにハンドルがある限りActivityManager(イベントをディスパッチできるように)。ただし、null以外の値で呼び出された場合は、メソッドにActivityManager自分自身を登録し(aが渡された場合は登録を解除します)、呼び出しません(これは、アクティビティが表示されないことを意味します)。 )。EventBussetDisplaynullsetDisplaysetDisplay

于 2012-11-08T15:06:16.160 に答える