Board logo

標題: jqGrid add/edit row問題 [打印本頁]

作者: rayin    時間: 2011-3-28 17:47     標題: jqGrid add/edit row問題

請問當我add/edit一行row後,
要怎樣才可Update自己的Database?

找了整個demo也沒有
http://www.trirand.com/blog/jqgrid/jqgrid.html

Please help and thanks!
作者: jocosn    時間: 2011-5-9 17:54

這個 jqGrid 好像範例講解很少,可能是因為它要錢,所以要等你購買版權後去問他。如果他把一堆範例寫給你,可能它就收不到 $$ 了,這是一種傳統的商業成功模式。

你可以換一個
http://code.google.com/p/jquery-datatables-editable/
http://www.phpclasses.org/packag ... database-table.html

最近我在看 Ajax 的資料庫後台管理介紹,國外一些教學有部分是直接抓取已經傳到 client 端的值給你轉成 input text、textarea 作修改,然後直接把修改後的該筆資料顯示到 client 端,再把相關值傳回 server,刪除時是只直接刪除 client 的該筆資料,再傳回後端通知刪除該筆資料,我大概比對傳統非 ajax 模式,發現這會有幾個問題。你在使用這類 ajax 後台管理時可以加以注意。至於你要的做法如何,你自行斟酌,或請有經驗的人(例如壇主)幫忙解答。

如果後台管理只有你一個人有刪修權限,那我提到的這類的 ajax 問題不大,但是如果有多人都有這個權限,問題就來了,隨便舉個例子:
當你修改完後利用 ajax 傳回 server 後台,然後直接把你的修改資料在 client 端顯示時,如果此時也有別人在修改該筆資料、或已經修改完資料、或開啟browser很久後想要修改該筆資料,想想這會發生什麼問題?梗就來了,梗在哪,梗在下面介紹。

假設某甲、某乙、某丙的權限一樣,都有刪修權限,某甲早上 10 點開啟後台,但是臨時有事去撇個風,這時某乙上線把第 10 筆資料改好後 save,某甲撇完風回來要修改第10筆資料,此時他螢幕看到的是尚未被某乙修改前的資料,該筆資料並沒有 server push 的到某甲 client 端螢幕上(像 Comet,這類技術我沒研究),這時某甲修改資料的話, ajax 是抓它 client 端的資料給某甲修改,改完後存回 server 端,如果某甲、某乙改後的資料都一樣,這不過是做個白工還好,如果某甲不小心打錯字,不就把某乙改好的正確資料給錯存?刪除時可能也一樣,當你要刪除某筆資料時,這筆資料卻已經被某乙刪除,也是會有一些問題。

如果你要殺很大,edit 或 delete 前都還會 ajax 再去資料庫抓一次資料顯示到 client 端再做刪修,這樣就跟傳統做法沒什麼不同,只是畫面好看,手續又變複雜而已。


當然問題還有很多,因為某丙還沒出現,請看我有假設三個人,等某丙出現執行份內工作刪修資料時,梗又來了。但是限於時間關係,我無法打太多,要等壇主或有經驗的人來解決問題。
作者: wmh    時間: 2011-5-10 23:20

這樣的 UI 要套用現成的是容易,但是是否達到需求又是另一回事。
如同 jocosn 所提的,如果要做到即時、又能避免編輯上的衝突,是有相當難度的,
而且光靠 JavaScript 的 library 是不夠的,得後端的程式也一同設計進去。

還是要看需求,如果真有多人同時編輯的需要,這樣的 UI 可能就要自己設計了,
做一個像 Google Docs 那樣的系統可不容易。
作者: jocosn    時間: 2011-5-11 09:57

本帖最後由 jocosn 於 2011-5-11 10:22 編輯

回復 3# wmh

感恩壇主的回覆。
壇主大大,「多人同時編輯」這部分,ajax VS 傳統做法,大大有相關心得可以分享嗎?
最近半年我上網搜了相關資料,總是看了沒什麼感想。
目前現成的 Ajax UI 幾乎都是單人編輯,
如果是小系統單人用 ok,但是面對比較大的case時多人同時編輯,會有很多問題。
像是論壇如果某區有多個版主的話,同時對某個主題作修改會發生什麼情形?
作者: wmh    時間: 2011-5-13 02:00

回復 4# jocosn

多人編輯這部份我沒什麼實做經驗耶,傳統的論壇大多沒設計到這樣,所以通常是後面編輯的會蓋掉前面的。
有些 wiki 會做到版本控管以及多人編輯的避免衝突,也可以避免直接被蓋掉的問題。

如果是 AJAX 的話,我到是還沒看過類似的 open source 的程式,
所以要做的話,就參考 Google Docs 的效果,架構上就自行設計囉,
comet 相關的概念可以參考這篇:http://www.josephj.com/entry.php?id=358
作者: jocosn    時間: 2011-5-13 14:24

本帖最後由 jocosn 於 2011-5-13 14:30 編輯

回復 5# wmh

我突然想起,多年前我幫朋友寫 CRUD 時曾想過用 Instant Message 做即時通知,當有資料變動時,順便發一個簡訊告知,然後 client 端自行手動 refresh,但是這個 solution 被我另一個好朋友說這個 solution 不是及時通嗎?我心想Comet 要server 配合,難到有更好的方法?當時可以立刻支援 server push,就只有 IM。

後來想想因為還要 client 端另外申請帳號並安裝 IM,我語帶含蓄(因為我脆弱的心靈怕再一次被傷害說這 solution 不好) 問說可以做及時通知你要不要試試看,後來發現我的朋友很懶還是不好意思怕我再多寫(當年雖然 IM 相關的介紹不多,但是已經有人實做出來,我只要整合就好),說功能不用做到這樣,後來就不了了之。

現在看來,最近這幾年才宣布死灰復燃的 HTML5,他的 WebSocket 好像是個解決方案(但是該篇文章評論有人說 WEBSOCKET 是廢柴一根)。
作者: rayin    時間: 2011-5-18 11:47

這個 jqGrid 好像範例講解很少,可能是因為它要錢,所以要等你購買版權後去問他。如果他把一堆範例寫給你, ...
jocosn 發表於 2011-5-9 17:54


http://code.google.com/p/jquery-datatables-editable/
為什麼我在datatables官網找不到這個@@
是自己寫的嗎, 很實用!
至於多人編輯的問題, 因為只有一個人有很權力,所以問題不大
謝謝你!




歡迎光臨 jsGears.com 技術論壇 - AJAX, JavaScript, jQuery, 網站開發, 前端效能優化 (http://jsgears.com/)