0

私は Dani の GWTP コースに従いましたが、プレゼンターでの TabLayoutPanel の使用についてはカバーされていません。

3 つのタブ (それぞれに VerticalPanel がある) を持つ TabLayoutPanel があります。@ProxyCodeSplit を使用して、各タブのコードが個別に読み込まれるようにしました。

Eclipse で GWT のデザイナーに OnBeforeSelection のハンドラーを追加すると、コードが自動的にビューに追加されます。その後、ビューは適切なプレゼンターをロードできます。

それはコードの適切な場所のようには思えませんが、そうですか?

TabLayoutPanel 内のさまざまなタブとコード分割をどのように処理していますか?

4

1 に答える 1

0

私はこれを理解したと思います。

TabLayoutPanel を使用したプレゼンター (MainPresenter と呼びましょう):

@ContentSlot public static final Type<RevealContentHandler<?>> SLOT_first = new Type<RevealContentHandler<?>>();
@ContentSlot public static final Type<RevealContentHandler<?>> SLOT_second = new Type<RevealContentHandler<?>>();

public interface MyView extends View {
    public void setMainPresenter(MainPresenter presenter);
    public TabLayoutPanel getTeamsPanel();
}

@Inject PlaceManager placeMananger;
@Inject FirstPresenter firstPresenter;
@Inject SecondPresenter secondPresenter;

@ProxyCodeSplit
public interface MyProxy extends Proxy<MainPresenter> {
}

@Inject
public MainPresenter(final EventBus eventBus, final MyView view,
        final MyProxy proxy) {
    super(eventBus, view, proxy);
    view.setMainPresenter(this);
}

@Override
protected void revealInParent() {
    RevealRootContentEvent.fire(this, this);
}

public void setTabContents(Integer tab) {
    if (tab == 0) {
        placeMananger.revealPlace(new PlaceRequest("first"));
    } else if (tab == 1) {
        placeMananger.revealPlace(new PlaceRequest("second"));
}

次に、MainView でメソッド setMainPresenter() を実装して、参照をローカルに保存します。通常の setInSlot() を実装してから、次のタブ ハンドラーを追加します。

@UiHandler("mainTabs")
void onMainTabsBeforeSelection(BeforeSelectionEvent<Integer> event) {
    mainPresenter.setTabContents(event.getItem());
}

ハンドラーは、ユーザーがタブを変更するたびに MainPresenter を呼び出します。次に、setTabContents() は、適切な「タブ」プレゼンターの RevealInParent() を呼び出します。

于 2012-06-20T09:07:03.130 に答える