2012-07-24 90 views
1

我有一個非常large webform這是我的Yii Web應用程序的中心。 表單實際上由多個html表單元素組成,其中很多都是根據需要通過AJAX加載的。處理與許多領域的表格

由於表單的大小和複雜性,有多個保存或提交按鈕是不可行的。我寧願更新數據庫中的每個字段,因爲它是通過異步編輯的方式使用可jeditable或類似jeditable的功能將新值添加到服務器。

有沒有人做過類似的事情?理論上,我認爲我可以設置一個端點,並讓每個控制都通過它的名稱,新值以及您想要執行的操作CRUD。然後端點可以根據某種地圖適當地路由請求並返回產品。這似乎有人必須以前解決過這個問題,我不想浪費時間重新發明輪子。

感謝您的時間,感謝您對架構/實現的想法。

回答

1

在類似的情況下,我決定僅使用CActiveForm來簡化Yii standarts(它可以使用Ajax驗證)驗證,避免使用「required」屬性。當然,要保持好形式的邏輯結構。

平常你是對的。我手動使用jQuery爲控制器生成AJAX請求(以及其他任何操作),並在需要時處理它們。因此你可以在控制器(分析請求中的參數)和你自定義的jQuery(使用組選擇器)中使用CRUD,但你很難直接使用CActiveForm(這很好:壓縮不能總是擊敗邏輯和模型的結構)。

在PHP中使用JavaScript的任何複合解決方案都會影響您的非平凡應用程序的靈活性。

+0

還有一些具體的做法。我遇到了幾種大型形式的情況,而非僅僅是分開。所以我創建了一個主要的'CActiveForm'類和它的幾個後代。對於'views'我創建了一個具有公共部分的'partial',並將其包含在'renderPartial'中。當然,JavaScript函數是以相似的方式分開的。 – 2012-07-25 06:29:05

0

昨晚睡它之後,我發現這個職位:

jQuery focus/blur on form, not individual inputs

我使用的這個修改後的版本在客戶端更新通過AJAX每種形式,而不是更新的每個字段。每個表單在兩秒鐘不活動後自動提交數據。缺點是如果客戶端瀏覽器崩潰,客戶端可能會丟失一些數據,但好處是我可以使用Yii的內置控制器操作,而且我不必編寫大量自定義PHP。由於我的表格很小,但其中有很多,所以目前看起來效果很好。

感謝亞歷山大對你的出色投入,並感謝Afnan的幫助:)