2012-03-17 46 views

回答

3

我已经在MVP中成功使用了CellTable。关键是要了解这个架构的目的。

MVP并不是关于您的模型完全不可知的视图,在MVP中,视图只适用于您的特定模型类是很好的。主要观点是在演示者中尽可能多地保持模型处理和事件处理。这使得演示者代码可以高效地进行单元测试。任何需要浏览器环境的东西(例如小工具)都应该放在视图中,它不会干扰正常的单元测试(这些组件只能用GwtTestCase进行测试,这很慢,因为它的速度很慢)。

我有一个View接口方法来创建表,它作为HasData返回。在演示者绑定方法中,我调用此方法获取表,实例化表的数据提供者,并使用任何更新的数据操作演示者中的数据提供者。

//MyPresenter.java 
HasData<MyClass> table = display.addTable(); 
ListDataProvider<MyClass> dataProvider = new ListDataProvider<MyClass>(); 
dataProvider.addDataDisplay(table); 

//assumes results is a collection of MyClass to display. 
//use for loop if you need to do some manipulation to get the objects in 
dataProvider.getList().addAll(results); 


//MyView.java 
@Override // since this implements the definition from the view interface 
public HasData<MyClass> addTable() 
{ 
    CellTable<MyClass> table = buildTable(); //boiler-plate table building code in this method 
    myPanel.add(table); 
    return table; 
} 

这使我保持在它所属的视图的视图逻辑(列定义和这样),以及处理在演示者的数据模型。

+0

如果'TransUnit'读取'MyClass',并且'@ Override'从'addTable'中省略,因为我们看不到足够的'class MyView'来查看它为什么在那里?或者我错过了什么? – 2014-08-28 11:49:08

+0

@MattWallis你是对的类。通常会在视图中的任何内容中使用'@ Override',因为演示者将引用一个视图界面(至少这是我一直这样做的),所以我认为这是有意义的包括在这里。 – 2015-01-19 07:43:12