2016-11-23 35 views
0

我:GWTP创建新的主持人每次

  • 简单的嵌套主持人(ChannelPresenter),其中有表(网格),在它的记录。我需要在每个ChannelPresenter.displayEditor()调用中创建新的ChannelEditorPresenter实例。
  • 弹出主持人小工具(ChannelEditorPresenter)应在每个ChannelEditorPresenter.edit显示弹出式窗口()调用

目前我注射ChannelEditorPresenter到ChannelPresenter构造,但在这种情况下,我有ChannelEditorPresenter只有一个实例。实际上,我需要为每个呼叫单独提供Popup演示者。 (很多分离的窗口,每个都有自己的数据)。

ChannelPresenter.java:

public class ChannelPresenter extends Presenter<ChannelPresenter.MyView, ChannelPresenter.MyProxy> implements ChannelUiHandlers { 

    public interface MyView extends View, HasUiHandlers<ChannelUiHandlers> { 
     void load(); 
    } 

    @ProxyStandard 
    @NameToken(NameTokens.CHANNELS) 
    interface MyProxy extends ProxyPlace<ChannelPresenter> { 
    } 

    ChannelEditorPresenter channelEditorPresenter; 

    @Inject 
    ChannelPresenter(EventBus eventBus, MyView view, MyProxy proxy, 
        ChannelEditorPresenter channelEditorPresenter 
        ) { 
     super(eventBus, view, proxy, ApplicationPresenter.SLOT_MAIN); 
     getView().setUiHandlers(this); 
     this.channelEditorPresenter = channelEditorPresenter; 
    } 

    @Override 
    protected void onBind() { 
     super.onBind(); 
     getView().load(); 
    } 

    @Override 
    public void displayEditor(Channel channel) { 
     // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
     // Here I need to create new instance for each call 
     // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
     addToPopupSlot(channelEditorPresenter); 
     channelEditorPresenter.edit(channel); 
    } 
} 

回答

0

,我发现这里的解决方案:Instantiate a PresenterWidget (GWTP) manually

我需要注入com.google.inject.Provider <ChannelEditorPresenter>而非纯ChannelEditorPresenter

ChannelPresenter.java:

public class ChannelPresenter extends Presenter<ChannelPresenter.MyView, ChannelPresenter.MyProxy> implements ChannelUiHandlers { 

    public interface MyView extends View, HasUiHandlers<ChannelUiHandlers> { 
     void load(); 
    } 

    @ProxyStandard 
    @NameToken(NameTokens.CHANNELS) 
    interface MyProxy extends ProxyPlace<ChannelPresenter> { 
    } 

    Provider<ChannelEditorPresenter> channelEditorPresenterProvider; 

    @Inject 
    ChannelPresenter(EventBus eventBus, MyView view, MyProxy proxy, 
        Provider<ChannelEditorPresenter> channelEditorPresenterProvider 
        ) { 
     super(eventBus, view, proxy, ApplicationPresenter.SLOT_MAIN); 
     getView().setUiHandlers(this); 
     this.channelEditorPresenterProvider = channelEditorPresenterProvider; 
    } 

    @Override 
    protected void onBind() { 
     super.onBind(); 
     getView().load(); 
    } 

    @Override 
    public void displayEditor(Channel channel) { 
     ChannelEditorPresenter channelEditorPresenter = channelEditorPresenterProvider.get(); 
     addToPopupSlot(channelEditorPresenter); 
     channelEditorPresenter.edit(channel); 
    } 
} 
相关问题