2012-07-03 29 views
0

我想窩在GWTP標籤主持人。我有一幀(北)即卡組1和一個幀(西),該標籤組2.當我與組1相互作用我更新其控制組2.我已經看過嵌套標籤的例子中的嵌套的選項卡呈現主持人,但我一直無法確定我的錯誤。GWTP嵌套的標籤主持人

兩個TabContainerPresenters是ManagmentTabsPresenter和SettingsTabsPresenter。這些孩子就像下面的HomePresenter。這些孩子的內容顯示在DockLayoutPanel的中心。我想讓ManagementTabsPresenter和SettingsTabsPresenter顯示在同一個DockLayoutPanel的West插槽中。

我看到的問題是,當運行此代碼時,ManagementTabsPresenter的revealInParent()方法和SettingsTabsPresenter的revealInParent()方法都會在我試圖在子選項卡上查看一個時調用。 (即homePresenter)。爲什麼這兩個revealInParent方法都被調用?我錯過了什麼?確實,SettingsTabsPresenter和ManagementTabsPresenter都位於顯示的父級選項卡中。這是否意味着當父tabcontainerpreseter是revelatedinparent這兩個tabcontainerprestners(nonleavetabcontentproxy)的revealInParent會叫什麼名字?

public class HomePresenter extends Presenter<HomePresenter.MyView, HomePresenter.MyProxy> { 
@Inject 
AppPlaceManager appPlaceManager; 

@NameToken(NameTokens.homePage) 
@ProxyStandard 
@NoGatekeeper 
public interface MyProxy extends TabContentProxyPlace<HomePresenter> { 
} 

public interface MyView extends View { 
} 

@TabInfo(container = ManagementTabsPresenter.class) 
static TabData getTabLabel(MainAppGinjector injector) { 
    return new TabDataBasic(injector.getVSMMessages().home_tab(), ClientConstants.HOME_TAB_POSITION); 
} 

@Inject 
public HomePresenter(final EventBus eventBus, final MyView view, final MyProxy proxy) { 
    super(eventBus, view, proxy); 
} 

@Override 
protected void revealInParent() { 
    RevealContentEvent.fire(this, ManagementTabsPresenter.TYPE_MAIN_CONTENT_SLOT, this); 
} 
} 





public class ManagementTabsPresenter extends TabContainerPresenter<ManagementTabsPresenter.MyView, ManagementTabsPresenter.MyProxy> { 

/** 
* {@link ManagementTabsPresenter}'s proxy. 
*/ 
@ProxyStandard 
public interface MyProxy extends Proxy<ManagementTabsPresenter> { 
} 

/** 
* {@link ManagementTabsPresenter}'s view. 
*/ 
public interface MyView extends TabView { 
} 

/** 
* Fired by child proxie's when their tab content is changed. 
*/ 
@ChangeTab 
public static final Type<ChangeTabHandler> TYPE_Management_ChangeTab = new Type<ChangeTabHandler>(); 

/** 
* Use this in leaf presenters, inside their {@link #revealInParent} method. 
*/ 
@ContentSlot 
public static final GwtEvent.Type<RevealContentHandler<?>> TYPE_MAIN_CONTENT_SLOT = MainPresenter.CENTER_SLOT; 


/** 
* This will be the event sent to our "unknown" child presenters, in order for 
* them to register their tabs. 
*/ 
@RequestTabs 
public static final Type<RequestTabsHandler> TYPE_Management_RequestTabs = new Type<RequestTabsHandler>(); 

@Inject 
public ManagementTabsPresenter(final EventBus eventBus, final MyView view, 
           final MyProxy proxy, AppPlaceManager appPlaceManager) { 
    super(eventBus, view, proxy,TYPE_MAIN_CONTENT_SLOT, TYPE_Management_RequestTabs, TYPE_Management_ChangeTab); 
} 


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



public class SettingsTabsPresenter extends TabContainerPresenter<SettingsTabsPresenter.MyView, SettingsTabsPresenter.MyProxy> { 

/** 
* {@link SettingsTabsPresenter}'s proxy. 
*/ 
@ProxyStandard 
public interface MyProxy extends Proxy<SettingsTabsPresenter> { 
} 

/** 
* {@link SettingsTabsPresenter}'s view. 
*/ 
public interface MyView extends TabView { 
} 

/** 
* Fired by child proxie's when their tab content is changed. 
*/ 
@ChangeTab 
public static final Type<ChangeTabHandler> TYPE_Settings_ChangeTab = new Type<ChangeTabHandler>(); 

/** 
* Use this in leaf presenters, inside their {@link #revealInParent} method. 
*/ 
@ContentSlot 
public static final GwtEvent.Type<RevealContentHandler<?>> TYPE_MAIN_CONTENT_SLOT = MainPresenter.CENTER_SLOT; 


/** 
* This will be the event sent to our "unknown" child presenters, in order for 
* them to register their tabs. 
*/ 
@RequestTabs 
public static final Type<RequestTabsHandler> TYPE_Settings_RequestTabs = new Type<RequestTabsHandler>(); 

@Inject 
public ManagementTabsPresenter(final EventBus eventBus, final MyView view, 
           final MyProxy proxy, AppPlaceManager appPlaceManager) { 
    super(eventBus, view, proxy,TYPE_MAIN_CONTENT_SLOT, TYPE_Settings_RequestTabs, TYPE_Settings_ChangeTab); 
} 


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




public class MainPresenter extends Presenter<MainPresenter.MyView, MainPresenter.MyProxy>{ 

@Inject VSMRequestFactory requestFactory; 
@Inject VSMMessages vsmMessages; 
@Inject VSMExceptionMessages vsmExceptionMessages; 
@Inject EventBus eventBus; 

@ProxyStandard 
@NoGatekeeper 
public interface MyProxy extends Proxy<MainPresenter> { 
} 

public interface MyView extends View { 

} 

@ContentSlot 
public static final Type<RevealContentHandler<?>> SOUTH_SLOT = new Type<RevealContentHandler<?>>(); 
@ContentSlot 
public static final Type<RevealContentHandler<?>> WEST_SLOT = new Type<RevealContentHandler<?>>(); 
@ContentSlot 
public static final Type<RevealContentHandler<?>> CENTER_SLOT = new Type<RevealContentHandler<?>>(); 
@ContentSlot 
public static final Type<RevealContentHandler<?>> NORTH_SLOT = new Type<RevealContentHandler<?>>(); 

@Inject 
public MainPresenter(EventBus eventBus, MyView view, MyProxy proxy) { 
    super(eventBus, view, proxy); 
} 

@Override 
protected void revealInParent() { 
    RevealRootLayoutContentEvent.fire(this, this); 
} 

@Override 
protected void onReveal() { 
    super.onReveal(); 
    initializeAppUser(); 
} 

} 
+0

能否請您提供一段代碼或鏈接,你是以下? – PVR

+0

所以我認爲問題在於我想在這裏做什麼。我希望西面的兩個面板只在激活時才顯示。看起來GWTP想讓它們始終可見。我如何讓一個人隱藏? –

回答

0

它應該是一個事件問題,當您選擇一個選項卡時,SelectionEvent可能會被錯誤的選項卡佔用。你能添加一些關於標籤初始化的代碼嗎?

+0

選擇事件正在被錯誤的選項卡消耗。這兩個揭示了每個tabcontainerinparent方法正在被解僱。我無法弄清楚爲什麼。 –

+0

事件有一個源參數,消耗事件時可以依賴此參數,並使用getSource()返回。說一個選項卡上的點擊設置本身作爲源,然後孩子們查看可以保證在更改事件來自 – Arcadien

+0

是的,我同意這一點。但我從哪裏可以得到這個SelectionEvent?我的代碼在那裏。 –