0

嘿,所以我只是在学习 gwtp 框架,我遇到了一些困境。我在顶层有一个 LayoutPresenter,它有一个主内容槽和菜单内容槽,我正在尝试找到一种方法将每个槽的演示者绑定在一起,以便在显示主要内容时它会自动显示正确的一面菜单。目前,我在菜单的 Presenter 中有一个静态布尔值,它会更新 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;
}
    }

然后在主要内容Presenter中:

    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

据我了解这个问题,您希望为不同的主要内容提供不同的侧面菜单。
在这种情况下,有两种解决方案:

  1. 将菜单视为普通演示者(您可能会为每种主要内容类型设置多个)。MenuPresenter您只需要使用与您的主要内容 Presenter 相同的历史标记来注释相应的内容。因此,对于上面的示例,您将PhoneCallMenuPresenter使用与您的PhoneCallPresenter. 当您导航到/phonecall(或任何您的历史标记)时,两者PhoneCallPresenter都会PhoneCallMenuPresenter自动显示。(你不必做任何事情)。
  2. 如果您只想拥有一个MenuPresenter并将要显示的逻辑放在其中Presenter,我建议使用 aPresenterWidget而不是 normal Presenter。将MenuPresenterWidget被注入LayoutPresenter并将添加到LayoutPresenter.SIDE插槽中。您可以为 定义一个设置器MenuPresenterWidget以指定当前显示的主要内容(将从 调用该设置器,LayoutPresenter或者您可以覆盖该onReset()方法并检查当前的位置请求并决定在菜单中显示什么。

对于解决方案 1,您必须MenuPresenter为每个主要内容都有一个,Presenter并且可能有许多代码行是多余的(您可以创建一个基础MenuPresenter并从中派生)。因此,如果侧面菜单中有很多业务逻辑与主要内容完全不同,我会选择解决方案 1。如果您只显示不同的链接,创建MenuPresenter每个主要内容的开销Presenter可能是到高,我会选择解决方案 2,只MenuPresenterWidget为所有主要内容类型创建一个并始终显示它。

于 2012-08-22T08:58:57.487 回答