您發佈的代碼與回答您的問題無關。比方說,你有4個主持人:
- MainPresenter
- HeaderPresenter
- NavigationPresenter
- 首頁演示
的MainPresenter
將包含3名其他主持人。當一個地方被揭露(家)時,一個事件被解僱。
HomePresenter
代碼:
@Override
protected void revealInParent() {
// trigger the setInSlot of MainPageView
RevealContentEvent.fire(this, MainPagePresenter.TYPE_SetMainContent,
this);
}
然後此事件是由MainPageView
這增加的內容,以所述槽的一個setInSlot
處理。這就是爲什麼MainPresenter
應該有3個插槽,下面的代碼:
@ContentSlot
public static final Type<RevealContentHandler<?>> TYPE_SetMainContent = new Type<RevealContentHandler<?>>();
@ContentSlot
public static final Type<RevealContentHandler<?>> TYPE_SetHeaderContent = new Type<RevealContentHandler<?>>();
@ContentSlot
public static final Type<RevealContentHandler<?>> TYPE_SetNavigationContent = new Type<RevealContentHandler<?>>();
private boolean headerNavigationDisplayed = false;
@Inject
public MainPagePresenter(final EventBus eventBus, final MyView view,
final MyProxy proxy) {
super(eventBus, view, proxy);
}
@Override
protected void revealInParent() {
// trigger setInSlot in the RootView
RevealRootContentEvent.fire(this, this);
}
@Override
protected void onReveal() {
super.onReveal();
if (!headerNavigationDisplayed) {
// Fire this event to force reveal the header and navigation
// presenters
MainContentSetEvent.fire(this, "ThreePart");
headerNavigationDisplayed = true;
}
}
當MainPagePresenter
顯露。它觸發了一個自定義事件MainContentSetEvent
。我有一個參數,但它不是你需要的。爲了處理這個事件,HeaderPresenter
必須實現MainContentSetHandler接口。請輸入以下代碼:
@Override
protected void revealInParent() {
RevealContentEvent.fire(this, MainPagePresenter.TYPE_SetHeaderContent,
this);
}
@ProxyEvent
@Override
public void onMainContentSet(MainContentSetEvent event) {
forceReveal();
}
對NavigationPresenter
做同樣的處理。把下面的代碼:
@Override
protected void revealInParent() {
RevealContentEvent.fire(this,
MainPagePresenter.TYPE_SetNavigationContent, this);
}
@ProxyEvent
@Override
public void onMainContentSet(MainContentSetEvent event) {
layout = event.getLayout();
forceReveal();
}
在觀察側,把下面的代碼在MainPageView
:
@Override
public void setInSlot(Object slot, Widget content) {
if (slot == MainPagePresenter.TYPE_SetMainContent) {
setMainContent(content);
} else if (slot == MainPagePresenter.TYPE_SetHeaderContent) {
setHeaderContent(content);
} else if (slot == MainPagePresenter.TYPE_SetNavigationContent) {
setNavigationContent(content);
} else {
super.setInSlot(slot, content);
}
}
如果您想了解整個機制,在調試模式下運行,這是容易理解調用的層次結構。因爲您知道SimpleNestetExample
,所以我只放了相關代碼,您應該可以編寫缺少的代碼。
不要你只是在主持人上打電話給setinslot(..),而且它做的工作? – HaveAGuess 2012-10-28 19:10:32