【问题标题】:GWT-Platform revealing presenters togetherGWT-Platform 一起展示演示者
【发布时间】:2012-08-21 14:02:09
【问题描述】:

嘿,所以我只是在学习 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));
    }
}

}

【问题讨论】:

    标签: java gwt gwt-platform gwt-mvp


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2012-04-02
      • 1970-01-01
      • 2012-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-27
      • 1970-01-01
      相关资源
      最近更新 更多