跳轉到內容

WebObjects/Web 應用程式/開發/WOForm 最佳實踐

來自華夏公益教科書

將 EO 附加到表單

[編輯 | 編輯原始碼]

Pierre Bernard

[編輯 | 編輯原始碼]

我確實建立了 EO 並將其插入到專門用於建立和最終儲存該 EO 的編輯上下文中。該編輯上下文與預設編輯上下文是同級關係。實際上,我所有的編輯都發生在專門的同級上下文中。會話預設值僅用於讀取。這消除了待處理更改掛起帶來的風險。

這樣做,我在初始表單中的 awakeFromInsertion() 中獲得了設定的預設值。

但是,我沒有將 EO 直接繫結到表單。我將 EO 轉換為字串字典。使用鍵值編碼,我首先提取想要在表單中使用的值集。然後,再次使用鍵值編碼以及格式化程式,我為每個值推匯出字串表示形式。該表單繫結到該值字典的 _克隆_。

表單提交後,我會將修改後的克隆與原始字典進行比較。我只針對已更改的值執行從字串到物件或 EO 值的逆向轉換。這是透過首先使用格式化程式解析字串,然後可能呼叫提取規範來完成的。

這具有以下優勢

  • 我可以將一對一關係對映到普通表單
  • 我只設定了實際修改的 EO 值
  • 我不會丟失內部精度高於表單顯示精度的值的精度
  • 我在程式碼中處理解析異常。一方面,這允許將無法解析的值保留在表單中

Ondra Cada

[編輯 | 編輯原始碼]

取決於應用程式。

但最常見的是,我會先建立 EO,但只有在設定妥當後才會將其儲存到 EC。這樣,它可以直接連線,並且如果使用者放棄它,它會在 GC 決定時消失 :)

Geoff Hopson

[編輯 | 編輯原始碼]

我發現擁有一個 formValues NSMutableDictionary 並使其鍵名與我的 EO 屬性名相同更加清晰。在我的 WOD 檔案中,我可以將文字欄位值等繫結到 'formValues.myAttribute。它還允許我預設一些預設值,隱藏我可能需要的任何隱藏欄位,等等。然後,一旦我對收集到的資料感到滿意,就可以輕鬆地將字典強加到插入的 EO 中。

Mike Schrag

[編輯 | 編輯原始碼]

你們大多數人是在預先建立 EO 並將表單欄位直接附加到 EO 的屬性上,還是將欄位克隆到 WOComponent 中並附加到這些欄位上,然後在“儲存”操作中將它們移動到新的 EO 中?第一種方法的問題是,如果有人導航離開,您將有一個空 EO 插入 EC,使用者不會意識到它仍然存在於他們的會話中,但它顯然更好,因為您可以直接連線到 EO 屬性,並且不必保持 Component 和 EO 欄位同步

Jean-François Veillette

[編輯 | 編輯原始碼]

我使用一個新的 EO,它位於用於插入/編輯的“同級”編輯上下文中。這樣,如果對 eo 進行了更改但沒有儲存,並且使用者更改了頁面,甚至使用了瀏覽器後退按鈕,我都不關心,他不會搞亂“主”編輯上下文。

我忘記提我在某些特殊情況下使用的另一個選項:不繫結到 EO,而是繫結到 NSMutableDictionary,然後在準備好儲存時,您可以建立 eo 並將字典值應用於它(有一個方法可以做到這一點)。

華夏公益教科書