在我的设计中,我希望有一个视图/展示者对,其中展示者是一个经过扩展的抽象类。例如,我的设计由一系列问题组成,这些问题一次只问一个。对于是/否的问题,我可能有一个视图/演示者对。我希望有一个具有getQuestion、onYes、onNo等抽象方法的YesOrNo演示器。这个提示者的展示会引发问题,并且重载的uibinderHandlers将调用onYes和onNo。然后,我可能会用HasDogYesOrNo presenter扩展YesOrNo presenter,它将包含关于如果用户有狗该怎么做的业务逻辑。我可能对HasCatYesOrNo也有类似的东西。
所以我创建了两个类,它们扩展了泛型
YesNoPresenter<T extends Proxy<?>> extends Presenter<YesNo.MyView, T>然后我定义了如下的类
public class HasCatsYesNoPresenter extends YesNoPresenter<HasCatsYesNoPresenter.MyProxy>当我去绑定它们的时候,我有
bindPresenter(YesNoPresenter.class, YesNoPresenter.MyView.class, YesNoView.class,
HasCatsYesNoPresenter.MyProxy.class);
bindPresenter(YesNoPresenter.class, YesNoPresenter.MyView.class, YesNoView.class,
HasDogsYesNoPresenter.MyProxy.class);但我得到了一个错误
$MyView is Double-bound: Bound at com.gwtplatform.mvp.client.gin.AbstractPresenterModule ...似乎我不能将两个演示者绑定到同一个视图?我真的很想重用视图,但是把不同的业务逻辑放在后面。在GWTP中有没有更好的方法来做到这一点?我必须要做的是对不同的业务逻辑展示器重用相同的视图,并让这些业务逻辑展示器中的每一个都是可加书签的。我想要的是让我的业务逻辑演示者也成为匿名类,但这可能要求太高了。
对于我的简单YesNo案例,还有其他方法来实现我的presenter,但是我有一些更复杂的presenter,我认为重用代码的最好方法是使用基本presenter所需的逻辑扩展该presenter。yesnopresenter只是一个例子。
发布于 2015-09-11 21:33:39
在多个Presenter中重用视图的最好方法是创建一个PresenterWidget及其关联的视图,并将其注入到您需要的Presenter中。
我必须具备的是对不同的业务逻辑展示器重用相同的视图,并使这些业务逻辑展示器中的每一个都可加书签
这正是PresenterWidget的作用所在。下面是一个可以在整个应用程序中重用的PresenterWidget的具体example。
发布于 2015-09-11 21:40:34
我相信[正如雷诺所说,你正在寻求使用PresenterWidget。然而,我也认为你想要做的事情只与演示者一起是可能的。
您可以为每个子演示者声明一个视图接口(如果您有一些逻辑需要在它们之间共享,这些子视图接口可以扩展父视图接口)
所以你会有
(请注意,"->“的意思是”取决于“)
ParentPresenter -> ParentView
ParentViewImpl implements ParentView
ChildPresenter1 -> ChildView1 extends ParentView
ChildPresenter2 -> ChildView2 extends ParentView
bind(ChildView1).to(ParentViewImpl)
bind(ChildView2).to(ParentViewImpl)
// and then you would have to bind your proxies manually
bind(MyProxy1.class).asEagerSingleton();
bind(MyProxy2.class).asEagerSingleton();通过这样做,您可以
这有意义吗?
发布于 2016-01-09 04:30:05
bindPresenter快捷方式方法不是用来处理您的用例的。我相信你想做的是:
bind(HasCatsYesNoPresenter.class).in(Singleton.class);
bind(HasCatsYesNoPresenter.MyProxy.class).asEagerSingleton();
bind(HasDogsYesNoPresenter.class).in(Singleton.class);
bind(HasDogsYesNoPresenter.MyProxy.class).asEagerSingleton();
bind(YesNoPresenter.MyView.class).to(YesNoView.class);视图绑定不绑定在单例中,以确保视图的新实例将被注入到每个呈现器中。
https://stackoverflow.com/questions/32403623
复制相似问题