2012-03-17 73 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