0

我有以下 GWT 类:

public class MyDefaultView extends Composite {
    // Uses UiBinder and just contains all the widgets for this view.
}

public class MyDefaultActivity extends AbstractActivity {
    @Inject
    private MyDefaultView myDefView;

    @Override
    public void start(AcceptsOneWidget panel, EventBus eventBus) {
        panel.setWidget(myDefView);
    }
}

public class MyActivityMapper implements ActivityMapper {
    @Override
    public Activity getActivity(Place place) {
        if(place instanceof MyDefaultPlace)
            return new MyDefaultActivity();
        else
            return null;
    }
}

public class MyAppModule implements EntryPoint {
    @Override
    public void onModuleLoad() {
        // Lots of initialization and wiring...

        // Why do I need this?!?
        MyDefaultView myDefaultView = GWT.create(MyDefaultView.class);
        RootPanel.add(myDefaultView);

        Place myDefaultPlace = GWT.create(MyDefaultPlace.class);

        PlaceHistoryHandler historyHandler = getHistoryHandler();
        historyHandler.register(myPlaceController, myEventBus, myDefaultPlace);
        historyHandler.handleCurrentHistory();
    }
}
  1. 如果我只是要在模块加载时调用并显示,为什么我需要添加MyDefaultView到?RootPanelPlaceHistoryHandler#handleCurrentHistory()MyDefaultView
  2. 如果我不应该MyDefaultView直接添加到RootPanel,那么我应该添加什么?

提前致谢!

4

1 回答 1

0

1)您不需要添加MyDefaultView,但您需要AcceptsOneWidget在活动管理器上实现并设置该面板的面板。这将负责让您的视图可见。

2) 在大多数应用程序中,您拥有始终可见的应用程序的一部分。例如,顶部的条形显示用户名等。这种面板需要添加到根面板。在您的视图应该可见的位置的那个面板中,AcceptsOneWidget应该使用实现的小部件/面板。此小部件应设置为显示在您的活动管理器中,通过setDisplay. 该小部件将传递给start您活动中的方法。下面是与 ActivityManager 和 RootPanel 一起使用的代码的样子:

final ActivityManager activityManager = new ActivityManager(myActivityMapper, eventBus);

activityManager.setDisplay(rootView.getViewPanel());
Rootpanel.add(rootView);
于 2012-11-17T11:24:27.623 回答