[Grails]前端可同時輸入多個子物件的方法(One-Many)

使用Grails開發系統時,經常會設計有許多一對多的對映關係,例如:一個人有多個電話、住址、電子郵件或是銀行帳戶,或者是一個物件可以上傳多個檔案、照片等。此時雖然可以輕易在domain class做好一對多的對映設定,但是在前端使用者介面,要新增多個子物件就需要一點技巧了。

這裡以一個禮物(Gift)對定多個連結(SysLink)為例子,大致說明一下需要修改的部份:

Gift Model主要就是設定對映多個連結(SysLink),以及cascade設定
Gift.groovy

Loading ….

SysLink最主要是要設定deleted的transient屬性,在前端可以用來是記錄使用者預計刪除的檔案。
SysLink.groovy

Loading ….

設定好Model後,就開始在view上面做手腳了,我們在想要新增/修改的頁面上透過render template的方式來做。

我這裡的範例是寫在透過generate-view自動產生的_form.gsp裡面,因為會用到jquery的一些語法,記得順便include進來

<g:javascript library="jquery" plugin="jquery"/>

在要產生links輸入區塊加入以下程式碼,就是去透過_links.gsp來render此區塊,並且把giftInstance參數傳過去。

<g:render template="links" model="[‘giftInstance’:giftInstance]" />

_links.gsp處理新增連結的Javascript,如果是其他欄位需求,自己去修改即可,原本已經在資料庫的資料則是透過render _link.gsp來達成

Loading ….

_link.gsp是用來呈現原本的資料,當使用者在前端刪除該筆資料時,透過Javascript是把deleted的屬性設定為true,並將該筆資料隱藏,如此一來當資料儲存時,就可以在Controller裡面去判斷哪些資料要新增,哪些資料要刪除。

Loading ….

GiftController.groovy在update屬性裡面要加上判斷,處理要刪除的資料

Loading ….

參考資料:
http://omarello.com/2010/08/grails-one-to-many-dynamic-forms/

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *