【问题标题】:Nested presenters with GWTP使用 GWTP 的嵌套演示者
【发布时间】:2011-11-26 13:07:15
【问题描述】:

我的主演示器中有内容槽,我如何在应用加载时将主演示器放在一个槽中,将菜单槽放在另一个槽中?

还是不可能?

提前致谢。

【问题讨论】:

    标签: gwt-platform


    【解决方案1】:

    对于 GWTP 1.5+ 的用户,请注意对插槽和展示演示者进行了许多新的更改。现在可以使用 NestedSlot 作为页面内容,使用 PermanentSlot 作为您希望在所有页面上显示的菜单来完成有问题的案例。

    幸运的是,这些更改有据可查。请参阅GWTP slot documentation 以获取有关新插槽类型的说明以及如何使用它们的示例。

    【讨论】:

    【解决方案2】:

    是的,你可以!在下面的示例代码中,我假设您的 HomePresenter 是一个地方并扩展了 Presenter,而您的 MenuPresenter 扩展了 PresenterWidget。
    在您的 MainPresenter 中:

    @ContentSlot public static final Type<RevealContentHandler<?>> MAIN_SLOT = new Type<RevealContentHandler<?>>();  
    @ContentSlot public static final Type<RevealContentHandler<?>> MENU_SLOT = new Type<RevealContentHandler<?>>();
    
    @Override
    protected void onReveal() {
        super.onReveal();
        setInSlot(MENU_SLOT, menuPresenter);
    }
    

    在您的 HomePresenter 中:

    @Override
    protected void revealInParent() {
        RevealContentEvent.fire(this, MainPresenter.MAIN_SLOT, this);
    }
    

    然后在 MainView 中:

    @UiField Panel mainContainer;
    @UiField Panel menuContainer;
    
    @Override
    public void setInSlot(Object slot, Widget content) {
        if (slot == MainPresenter.MAIN_SLOT) {
            mainContainer.clear();
            mainContainer.add(content);
        } else if (slot == MainPresenter.MENU_SLOT) {
            menuContainer.clear();
            menuContainer.add(content);
        } else {
            super.setInSlot(slot, content);
        }
    }
    

    【讨论】:

    • @Mikael,你的回答真的很有帮助。但我有一个问题。在这里,您所做的是将内容(小部件)添加到主容器(面板)。这不是开销吗?我们不能做一些隐藏显示内容(小部件)之类的事情吗?
    • @RAS 实际上,我不知道如何以任何其他方式进行操作。 setInSlot() 方法与具有单独演示者的 UI 组合有关,因此在某些时候您必须在面板中注入小部件。此外,清除面板并不意味着包含的小部件被丢弃,它可以稍后重新注入。
    • @MikaelCouzic,感谢您的回复。我明白你的意思。
    猜你喜欢
    • 2013-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多