正如gwt文档中所建议的那样,我尝试在创建应用程序时遵循MVP设计模式。使用简单树时,文档中的example是直截了当的,并且是MVP和gwt的良好示例。在该示例中,创建视图并将数据提供给要显示的视图。据我所知,这正是将视图,模型和演示者分开的方法。
使用CellTree,填充数据发生在TreeViewModel的数据提供程序中。数据提供者不能被带到单元树之外,因此我需要在视图中的单元树内填充所有数据。现在,视图需要知道模型并且MVP模式被破坏了。在向用户显示数据之前,我不想动态地将数据填充到单元树中,我需要编辑单元树中的数据并稍后将其保存为不同的格式。
我的问题是如何在MVP设计模式中实现CellTree或一般的Cell小部件?
答案 0 :(得分:2)
我已经将CellTable与MVP结合使用。
UI:
<g:HTMLPanel>
<g:ScrollPanel>
<p1:CellTable ui:field="cellTable" width="100%" styleName="style.cellTable" height="100%" />
</g:ScrollPanel>
</g:HTMLPanel>
查看界面:
public interface SomeCellListView extends IsWidget {
void setPresenter(Presenter listener);
// Method to set the CellTable data
void setCellList(ArrayList<ObjectDTO> list);
public interface Presenter {
void goTo(Place place);
void doSomething(int id);
}
}
查看实施:
public class SomeCellListViewImpl extends Composite implements SomeCellListView {
... all Ui Binder stuff here
@UiField(provided = true)
CellTable<ObjectDTO>cellTable = new CellTable<ObjectDTO>();
SomeCellListViewImpl(){
TextColumn<ObjectDTO> someColumn= new TextColumn<ObjectDTO>(){
@Override
public String getValue(ObjectDTO o) {
return o.getSomeFieldValue();
}
};
cellTable.addColumn(someColumn, "column1");
... add other columns here
}
// This method is called from Presenter to set CellTable data
public void setCellList(ArrayList<ObjectDTO> list) {
cellTable.setRowCount(list.size(), true);
cellTable.setRowData(0, list);
}
}
活动(或演示者):
//在构造函数中设置视图和服务(从ClientFactory获取视图)
public void start(AcceptsOneWidget containerWidget,EventBus eventBus){
// Make RPC call
this.service
.getCellList(new AsyncCallback<ArrayList<ObjectDTO>>(){
@Override
public void onFailure(Throwable caught) {
view.setError("Error fetching details");
}
@Override
public void onSuccess(ArArrayList<ObjectDTO> result) {
view.setCelllist(result);
}
});
view.setPresenter(this);
containerWidget.setWidget(view.asWidget());
}
此处,视图已由ClientFactory创建。视图仅包含CellTable的布局。创建视图时不会加载数据。当Activity启动时(也称为Presenter),将调用“start”方法。在这里,我们使RPC获取Cell数据并在视图中调用方法来设置数据。
我没有使用过CellTree。但是你总体上问过Cell小部件。因此想到分享这个。希望这会有所帮助。
答案 1 :(得分:0)
我和OP有同样的问题。我阅读了MVP教程第二部分,然后尝试在我的应用程序中使用CellTable,同时仍然保留MVP架构师。但我对这部分感到困惑:教程使用像Presenter这样的语法,但为什么你只使用Presenter?