2012-03-14 6 views
0

GWTPでダブルネストを使用しようとしています。 SimpleNestedSampleは1レベルしか行いません。私は(少なくとも)2つのレベルを持っていたい。しかし、私の最低レベルのプレゼンターは決して公開されません(またはインスタンシエートさえも)。私は以下の持っている私のClientModule.javaでダブルネストを使用するGWTP

public interface ClientGinjectorBase extends Ginjector 
{ 
    EventBus getEventBus(); 
    PlaceManager getPlaceManager(); 
    Provider<MainPresenter> getMainPresenter(); 
    AsyncProvider<DesktopPresenter> getDesktopPresenter(); 
    AsyncProvider<WebshopAppPresenter> getWebshopAppPresenter(); 
} 

public class ClientModule extends AbstractPresenterModule 
{ 
    @Override 
    public void configure() 
    { 
    install(new DefaultModule(DesktopPlaceManager.class)); 
    bindConstant().annotatedWith(DefaultPlace.class).to(NameTokens.desktopPage); 

    bindPresenter(
     MainPresenter.class, 
     MainPresenter.MyView.class, 
     MainView.class, MainPresenter.MyProxy.class); 

    bindPresenter(
     DesktopPresenter.class, 
     DesktopPresenter.MyView.class, 
     DesktopView.class, DesktopPresenter.MyProxy.class); 

    bindPresenter(
     WebshopAppPresenter.class, 
     WebshopAppPresenter.MyView.class, 
     WebshopAppView.class, WebshopAppPresenter.MyProxy.class); 
    } 
} 

はおそらく間違って明白なものがあるが、私はいくつかのヒントをいただければ幸いですClientGinjectorBase.javaでは、私は次のよう持っています。

ありがとうございます!

答えて

1

あなたが投稿したコードはあなたの質問に答えても関係ありません。

  • MainPresenter
  • HeaderPresenter
  • NavigationPresenter
  • ホームプレゼンター

MainPresenterは3人の他のプレゼンターが含まれます:あなたは4人のプレゼンターを持っているとしましょう。場所が公開されると、イベントが発生します。

HomePresenterコード:

@Override 
protected void revealInParent() { 
    // trigger the setInSlot of MainPageView 
    RevealContentEvent.fire(this, MainPagePresenter.TYPE_SetMainContent, 
      this); 
} 

そしてこのイベントはスロットのいずれかにコンテンツを追加MainPageViewsetInSlotによって処理されます。 MainPagePresenterが明らかにされている場合

@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; 
    } 
} 

MainPresenter次のコードで3つのスロットを持つべき理由です。カスタムイベントMainContentSetEventを発生させます。私はパラメータがありますが、それはあなたのために必要ではありません。このイベントを処理するには、HeaderPresenterthe 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を知っているので、関連するコードだけを置くだけで、不足しているコードを書くことができるはずです。

+0

あなたは単にプレゼンターにsetinslot(..)を呼び出さないでください。 – HaveAGuess

関連する問題