0

ねえ、私は gwtp フレームワークを学んでいて、ちょっとしたジレンマに遭遇しました。メイン コンテンツ スロットとメニュー コンテンツ スロットを持つ LayoutPresenter が最上位にあり、可能であれば各スロットのプレゼンターをバインドする方法を見つけようとしています。メイン コンテンツが表示されると、自動的に正しい面が表示されます。メニュー。現在、メニューのプレゼンターに onReveal と onHide を更新する静的ブール値があります。次に、メイン コンテンツが表示されたときにメニューが表示されているかどうかを確認し、表示されていない場合は表示します。

    public class MenuPresenter extends Presenter<MenuPresenter.MyView, MenuPresenter.MyProxy> {

private static boolean hidden = true;
    ...
    @Override
protected void revealInParent() {
    RevealContentEvent.fire(this, LayoutPresenter.SIDE, this);
}

@Override
protected void onReveal(){
    super.onReveal();
    hidden = false;
}

@Override
protected void onHide(){
    super.onHide();
    hidden = true;
}

public static boolean isHidden(){
    return hidden;
}
    }

次に、メイン コンテンツ プレゼンターで:

    public class ContentPresenter extends
    Presenter<ContentPresenter.MyView, ContentPresenter.MyProxy> {

...

private final DispatchAsync dispather;
private final PlaceManager placeManager;

@Inject
public PhoneCallPresenter(final EventBus eventBus, final MyView view, final MyProxy proxy, final DispatchAsync dispatcher, final PlaceManager placeManager) {
    super(eventBus, view, proxy);
    this.dispather = dispatcher;
    this.placeManager = placeManager;
}

@Override
protected void revealInParent() {
    RevealContentEvent.fire(this, LayoutPresenter.CONTENT, this);
}

@Override
protected void onReveal() {
    super.onReveal();
    if (MenuPresenter.isHidden()){
        placeManager.revealPlace(new PlaceRequest(NameTokens.menu));
    }
}

}

4

1 に答える 1

0

私が質問を理解した限り、あなたは異なるメインコンテンツのために異なるサイドメニューを持ちたいと思っています。
この場合、2つの解決策があります。

  1. メニューを通常のプレゼンターとして扱います(メインコンテンツタイプごとに複数ある可能性があります)。MenuPresenterメインコンテンツのプレゼンターと同じ履歴トークンで対応するものに注釈を付ける必要があります。したがって、上記の例PhoneCallMenuPresenterでは、と同じ履歴トークンで注釈が付けられたがありますPhoneCallPresenter/phonecall(または履歴トークンが何であれ)に移動するPhoneCallPresenterと、との両方PhoneCallMenuPresenterが自動的に表示されます。(何もする必要はありません)。
  2. 1つだけMenuPresenterにし、ロジックPresenter自体に何を表示するかを設定する場合PresenterWidgetは、通常のの代わりにを使用することをお勧めしますPresenter。にMenuPresenterWidget注入され、スロットLayoutPresenterに追加されます。LayoutPresenter.SIDEのセッターを定義して、MenuPresenterWidget現在表示されているメインコンテンツを指定できます(セッターはから呼び出されます。LayoutPresenterまたは、メソッドをオーバーライドしonReset()て現在の場所のリクエストを確認し、メニューに何を表示するかを決定できます。

ソリューション1の場合、MenuPresenterメインコンテンツごとに1つ必要でPresenterあり、多くのコード行が冗長になる可能性があります(ベースMenuPresenterを作成してそこから派生させることができます)。したがって、メインコンテンツごとにまったく異なるサイドメニューに多くのビジネスロジックがある場合は、ソリューション1を使用します。異なるリンクのみを表示する場合、MenuPresenterメインコンテンツごとに作成するオーバーヘッドは次のPresenterようになります。最高になり、ソリューション2を使用してMenuPresenterWidget、すべてのメインコンテンツタイプに対して1つだけを作成し、常にそれを表示します。

于 2012-08-22T08:58:57.487 に答える