在Web開發(fā)方面,實現(xiàn)主從表的維護需要考慮數(shù)據(jù)類型的轉(zhuǎn)換以及狀態(tài)保持等問題,之前使用ASP.NET的服務(wù)端控件實現(xiàn)了一套,但反復(fù)的頁面回傳,以及服務(wù)端的狀態(tài)同步,造成代碼量巨大,且重復(fù)代碼非常多,十分讓人厭煩,后來使用ExtJs在客戶端實現(xiàn)了主從表維護的簡單維護,這里從問題的分析和解決方法兩方面進行說明,將大致的思路記錄下來,具體的實現(xiàn)細節(jié)就略過了,歡迎感興趣的朋友一起討論。
編程么,重要的是思想和過程,不是么?
問題分析:
1.主從表功能組織的頁面元素
主表:FormPanel
從表:EditorGridView
2.狀態(tài)枚舉:
1)主從表都為新增狀態(tài)(標志符ID為-1),
2)主表為更新狀態(tài)(如ID為100),從表為新增狀態(tài)(ID為-1,父ID為100)
3)主表為更新狀態(tài)(如ID為100),從表部分為新增狀態(tài)(如ID為150,父ID為100),部分為更新狀態(tài)(ID為-1,父ID為100)
4)主表為更新狀態(tài),從表為更新狀態(tài)
3.數(shù)據(jù)提交
1)如何組織主從表數(shù)據(jù)結(jié)構(gòu)
2)如何標志數(shù)據(jù)狀態(tài)
3)如何標志數(shù)據(jù)ID
4)數(shù)據(jù)提交后,是否需要更新客戶端狀態(tài)?如果需要,如何更新,否則,多次提交怎么辦?
4.服務(wù)端解析
1)服務(wù)端如何解析
2)解析后的對象,如何存儲
3)存儲后的數(shù)據(jù)如何通知到客戶端狀態(tài)
解決思路
1)數(shù)據(jù)的存儲:
FormPanel中添加隱藏域:用于保存從表數(shù)據(jù)(store...的json格式串)
如果有多個從表對象,則添加多個隱藏域字段
2)數(shù)據(jù)讀取和顯示
數(shù)據(jù)讀取到界面時,通過服務(wù)端返回xml中(主表),其中xml隱藏域節(jié)點中添加從表(store json格式)的數(shù)據(jù)源,
然后客戶端成功接收后,讀取store,并更新到從表EditorGridView中
3)數(shù)據(jù)的編輯
主表通過FormPanel進行數(shù)據(jù)的編輯,從表使用EditorGridView,每個cell通過對應(yīng)的Editor進行編輯,新增和更新不需要進行特殊處理,
刪除時,注意需要判斷當前數(shù)據(jù)是新增還是已保存到數(shù)據(jù)庫的記錄,如果是新增數(shù)據(jù),則直接從EditorGridView對應(yīng)的Store中remove該
條數(shù)據(jù),后者則設(shè)置該記錄的狀態(tài)字段為field.setValue("delete","true"),新增和更新數(shù)據(jù)的狀態(tài)字段為{delete:false},然后調(diào)用store.filter("delete","false")
對客戶端數(shù)據(jù)進行過濾,不顯示已刪除的數(shù)據(jù)。
4)數(shù)據(jù)的提交
主表FormPanel提交時,需要讀取EditorGridPanel從表中的store同步到隱藏域中,然后通過form提交,
5)服務(wù)端數(shù)據(jù)的解析
服務(wù)端接收到客戶端傳來的數(shù)據(jù)后,解析數(shù)據(jù)并還原主從表的業(yè)務(wù)對象,新增和更新通過主鍵是否為-1進行區(qū)別,是否刪除通過刪除字段delete來區(qū)分,
根據(jù)狀態(tài)調(diào)用相應(yīng)的業(yè)務(wù)邏輯進行處理。
6)處理結(jié)果的返回
注意此處同步驟2)相似,不同在于,處理結(jié)果是在表單提交后的回調(diào)函數(shù)中進行處理。
如對本文有疑問,請?zhí)峤坏浇涣髡搲?,廣大熱心網(wǎng)友會為你解答?。?點擊進入論壇