我有一个使用 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 作为回调接口的意思。