0

我有一个使用 MVP、clientFactory、活动、地点和 uiBinder 的 GWT 2.4 应用程序。我有一个复合小部件,我用它自己的 ui.xml 文件作为独立对象创建。我引用该类并将其插入到主 viewImpl.ui.xml 文件中。

复合小部件从后端接收一些数据,我需要将其返回到活动中,以便它可以显示在表格中。我正在使用与视图关联的演示者来访问活动。下面是代码: 在 View 界面中:

public interface NameView extends IsWidget
{
    void setPresenter(Presenter presenter);
...    

public interface Presenter{
            void goTo(Place place);
            void setRowDataList(List<Data> rowData);
        }

在我的活动中,我实现了 View.Presenter,如下所示:

 Activity extends AbstractActivity implements NameView.Presenter

所以活动是我在独立小部件和我使用的活动的启动方法中需要的演示者:

NameView  nameView = clientFactory.getNameView();//NameView is just an example.
nameView.setPresenter(this); ...

设置演示者并实例化它。我的问题是,在小部件中我需要这个:

presenter.setRowDataList(rowData);

但我不确定如何从小部件中引用实例化的 Presenter?

这个单独的小部件,实际上是一个 gwtUpload 小部件,是独立的。我对上传的一些数据进行服务器端计算,这就是返回给这个小部件的数据。

小部件数据需要返回到 Activity 以便将该数据传递回 NameViewImpl 类。

我认为演示者是这样做的正确方法,但由于小部件没有连接到视图或 viewImpl,我需要一种方法来获取小部件的演示者。

我知道 GIN 会使用 DI 来完成,或者我可能会创建另一个演示者。我从来没有用 GWT 设置过 GIN。关于正确方法的任何想法?

工作实施:

我不知道这是否是最好的实现,但根据 Thomas 的回答,我在 ViewImpl 类的 setPresenter() 方法中将我的小部件设置为 Presenter(activity) 的实例。它作为小部件返回活动的传递。我认为这就是 Thomas 作为回调接口的意思。

4

2 回答 2

1

如果我理解正确,您有一组对象活动、演示者和 ui (the NameView),以及与这三者分开的另一个对象。分离的对象是 gwtUpload 小部件。

通知演示者的一种方法是使用eventBus. 我相信你在活动中有参考。对于gwtUpload我不知道您所说的“独立”对象到底是什么意思,您必须与其他演示者建立某种联系才能访问eventBus.

gwtUpload 小部件将eventBus在服务器端计算的结果中触发一个事件(通过它自己的演示者)。请记住,最好只发送模型对象作为结果。该活动将eventBus为该事件“注册”一个处理程序。在处理程序中,您可以将数据发送到视图以更新表格显示。

我认为您不需要GIN解决此问题,因为无论如何这里都是很好的入门教程: http ://code.google.com/p/google-gin/wiki/GinTutorial

于 2011-12-22T10:56:17.830 回答
1

我们在类似情况下所做的是为小部件定义一个回调接口(类似于您的演示者视图对中的演示者界面),然后我们通常使演示者界面扩展该小部件特定的接口。
然后,当我们setPresenter在视图上调用(或任何它被调用的方法)来关联演示者时,视图会立即调用setCallback具有相同值的小部件(演示者实现回调接口)。

另一种设计是将特定于小部件的回调隐藏在演示者界面的方法后面。让视图实现回调,实现方法,使其路由到演示者的等效方法。

顺便说一句,GIN 在这里帮不上忙。

于 2011-12-22T17:01:47.177 回答