2014-01-05 43 views
3

我有一個第三方類(假設它是一個樹狀容器)。何處爲Eclipse RCP中的視圖保存數據(模型)?

如何正確實現視圖?我在ViewPart類中看不到類似MVC的方法。例如,Swing中沒有類似setModel()的方法。

在Hello World視圖示例中,他們只是將一些硬編碼文本設置爲標籤。我應該在哪裏將數據保存在實際示例中?

UPDATE

假設我有一個良好的MVC小部件setModel()方法被命名爲MyGreatWidget()

這並不能解決問題。

我會寫這種情況下:

public void createPartControl(Composite parent) { 
    widget = new MyGreatWidget(parent); 
    widget.setModel(... // where to get data? 
    } 

更新2

換句話說:有沒有在Eclipse平臺的任何方便的地方,以保持應用程序或會話級範圍的數據?

更新3

我的問題是在哪裏保持反序列化對象,它已經在內存中。

換句話說:RCP 查看違規模型-查看 -controller模式?

UPDATE 4

讓我們重新整理了一個問題:哪個地區createPartControl()方法可以訪問?

1)它的參數Composite parent

2)任何一類

3)其他東西的任何靜態方法?

它可以訪問應用程序實例嗎?或工作臺實例?可能是應用程序環境?或者我可以把它需要繪製的數據的其他實例?

回答

2

如何正確實現視圖?我在ViewPart類中看不到類似MVC的方法。例如,在Swing中沒有setModel()方法。

你必須自己做。此外,您不必在視圖本身上設置模型,而是在與自己的框架相關的小部件上設置模型。

在Hello World視圖示例中,他們只是將一些硬編碼文本設置爲標籤。我應該在哪裏將數據保存在實際示例中?

序列化的包裝,這樣的POJO,進入數據庫等

你的問題有點含糊,你將有更具體的,如果你不明白我的答案。


編輯1:

號Eclipse RCP的不處理的數據源。它有輕量級的機制,可以處理諸如preferences之類的東西。對於你自己的數據,你必須序列化你的東西。

+0

請參閱我的更新。 –

+0

我不明白,你爲什麼要談論序列化?我的問題是在內存中何處保留反序列化的對象。 –

+0

@SuzanCioc ...你只是把它們留在記憶裏。您實例化模型對象並使用它。 – GGrec

3

我你的問題的理解是以下幾點:

  • 某種類型的用戶的交互使您的視圖/編輯器中顯示。
  • Eclipse框架開始創建一個內容(例如,您指定的createPartControl()方法)。此時,您應該初始化所有偉大的小部件和必要的控件(使其在您的UI部件中可用)。你可以讓它們成爲View類的私有實例,或者構建你自己的框架來跟蹤控件,例如在一些Map中。此外,在此步驟中爲查看器設置內容提供者。
  • 創建UI時,您可以開始使用數據填充窗口小部件(從文件讀取數據,向服務器發出請求等)。它可以在後臺作業中執行,以獲得更響應的UI。請注意,該數據加載機制(以及通知用戶界面關於數據的機制已被加載)因應用程序而異,因此您必須爲此創建我們自己的輪子。 這是您創建模型的步驟。它取決於你,你保留它(通常它只是作爲一個實例在你的視圖)。另外,請記住,您不需要立即爲組合框加載數據,因爲您可以使用延遲加載解決方案(使用ComboViewer和ContentProvider)。
  • 一旦數據被加載,你可以(爲一個Label控件等類似setText()
  • 就個人而言,我喜歡用JFace data binding mechanism用數據填充部件和保持模型最新填充部件有了它,通過調用相關的方法,而無需每次編寫代碼以從小部件獲取數據並將其寫回模型,然後再保存模型。

編輯:btw,我認爲沒有必要爲胖客戶端應用程序引入控制器層,因爲不需要控制UI的創建,因爲創建正確的視圖是由您的代碼嚴格定義的,這已經是客戶的機器了。沒有必要要求服務器返回一個視圖(與網絡應用程序不同),您只需要它返回一些數據(模型)。

希望這有助於。

0

我想我理解你的實際問題。我在同樣的問題上掙扎着。

當啓動一個新的Eclipse RCP項目時,您構建了許多操縱單個模型的視圖。你想知道你應該如何存儲實際的模型。這是因爲Eclipse使用「工作空間」範例,這是在啓動框架時打開的單個目錄。其他一切都從這個工作臺中誕生:項目,編輯的文件等等。

當您構建自己的應用程序時,您將很難找到一個好的選擇。通常,應用程序是基於文件的,具有諸如「打開」,「新文件」,「另存爲」或「關閉」等範例。多個視圖操縱這個單個'文件'。

我跟着下面的路徑/推理:

  • 有一個「根」或「主」認爲是總是存在的。該視圖初始化幷包含您的模型。打開或關閉文件時,您可以在此「主」視圖中更改參考。
  • 這並不適用於所有情況。因此,我使用WorkbenchPage的'輸入'字段。這具有允許多個窗口的額外好處。單個頁面(和單個輸入)對應於單個窗口。但是,您只能從UI線程中找到您的模型,例如,這會在異步作業中給您帶來問題。
  • 最後,我決定使用EditingDomain框架。您可以根據它的ID恢復EditingDomain。我在此EditingDomain中加載模型,因此即使GUI線程不再可用(例如異步作業),也可以從任何上下文輕鬆訪問它。
相關問題