Вложенные презентаторы с GWTP

У меня есть слоты для контента в моем основном презентере, как я могу поместить при загрузке приложения домашний презентер в один слот, а слот меню в другой?

или нельзя?

заранее спасибо.


person caarlos0    schedule 28.09.2011    source источник


Ответы (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);
    }
}
person Mikael Couzic    schedule 28.09.2011
comment
@ Микаэль, твой ответ действительно помогает. Но у меня есть вопрос. Здесь вам нужно добавить-удалить-добавить-удалить... содержимое (виджет) в основной контейнер (панель). Разве это не накладные расходы? Разве мы не можем сделать что-то вроде скрытия-отображения контента (виджета)? - person RAS; 03.05.2012
comment
@RAS На самом деле, я не вижу, как это сделать по-другому. Метод setInSlot() связан с композицией пользовательского интерфейса с отдельными презентаторами, поэтому в какой-то момент вам придется внедрить виджет в панель. Кроме того, очистка панели не означает, что содержащийся в ней виджет удаляется, его можно повторно внедрить позже. - person Mikael Couzic; 16.05.2012
comment
@MikaelCuzic, спасибо за ответ. Я понял твою мысль. - person RAS; 16.05.2012

Для пользователей GWTP 1.5+ обратите внимание, что в слоты было внесено много новых изменений и раскрыты ведущие. Рассматриваемый случай теперь может быть выполнен с использованием NestedSlot для содержимого страницы и PermanentSlot для меню, которое вы хотите отображать на всех своих страницах.

К счастью, эти изменения хорошо задокументированы. См. документацию по слотам GWTP, чтобы получить объяснение новых типов слотов с примерами того, как используй их.

person The Gilbert Arenas Dagger    schedule 25.02.2016
comment
Читаю документацию уже два дня, но до сих пор не могу ответить это довольно простой вопрос ^^ - person Stefan Falk; 02.03.2016