2011-09-28 34 views
11

我在我的主要演示者中擁有內容插槽,如何在應用程序加載時將主演講者放在一個插槽中,並將菜單插槽放在另一個插槽中?使用GWTP嵌套的主持人

還是不可能?

在此先感謝。

回答

16

是的,你可以!在下面的示例代碼中,我假設您的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); 
    } 
} 
+0

@Mikael,你的回答真的有幫助。但我有一個問題。這裏你要做的是將add-remove-add-remove .. content(Widget)添加到mainContainer(Panel)中。這不是一個開銷嗎?我們不能做隱藏內容顯示(Widget)嗎? – RAS

+1

@RAS其實,我不知道如何以任何其他方式做到這一點。 setInSlot()方法與具有獨立主持人的UI的組成相關,因此在某些時候,您必須在面板中注入一個小部件。另外,清除面板並不意味着所包含的小部件被丟棄,它可以稍後重新注入。 –

+1

@MikaelCouzic,謝謝你的回覆。我明白你的觀點。 – RAS

1

對於GWTP 1.5+的用戶,請注意了很多新的變化有被介紹給插槽,並揭示演示者。這種情況下,現在可以使用頁面內容的NestedSlot和您希望顯示在所有頁面上的菜單的PermanentSlot來完成。

幸運的是,這些更改已有詳細記錄。有關如何使用它們的示例,請參閱GWTP slot documentation以獲取關於新插槽類型的解釋。

+0

現在通過文檔閱讀兩天,但我仍然不能回答[這個相當簡單的問題](http://stackoverflow.com/questions/35729549/how-to-use-gwtp-for-a-listview-widget )^^ – displayname