2012-03-06 15 views
2

有兩種模式,比如A和B與A hasMany B的關係。用戶可以在創建A時關聯儘可能多的B行作爲(多個)。該應用程序允許用戶使用JQuery動態地添加和刪除B行,更具體地通過以下示例 - http://jsfiddle.net/mjaric/tfFLt/由於某些驗證,當保存失敗時,動態添加的表單域會丟失

除非保存(使用saveAll)由於服務器端驗證而失敗。在這種情況下,頁面在提交時刷新並且所有動態添加的字段都將丟失,用戶必須從頭開始重新創建所有行。

有什麼辦法,沒有動態添加字段使用JQuery會丟失並保留其舊值(與Cake的默認行爲相同)?可能會發出Ajax請求是一種選擇,因此頁面不會重新加載服務器端驗證失敗,但對我來說這不是一個選項,因爲表單也有一個文件上傳,據我所知,Ajax請求不支持文件trsnafer?

+0

通過ajax調用上傳文件就像一個魅力,這種方法只是有點不同。您需要在保存表單之前上傳文件,並在隱藏字段中成功上傳後存儲一些值。 – 2012-03-06 16:49:05

+0

@JulianHollmann感謝您的意見。我正在考慮使用JsHelper進行Ajax表單提交,但是CakePHP文檔說JsHelper不支持通過ajax進行文件上傳,所以我想我首先需要使用ajax(不使用幫助器)上傳文件,然後使用helper提交表單?另一個問題是我使用CakePHP媒體助手進行文件上傳(附件模式),這使像我這樣的新手難以像您所建議的那樣進行更改。 – 2012-03-06 17:07:32

+1

您可以再次創建所有B行,因爲您需要'$ this-> data'中的所有信息。我有很多這種格式的應用程序。對於上傳文件,只需在保存/上傳之前驗證所有字段。 – 2012-03-06 18:47:45

回答

0

正如您指出的,您可以在驗證失敗時呈現視圖時靜態放置所有字段。

無法通過AJAX進行文件上傳,因爲您無法從JS中讀取文件。儘管如此,還是有一個很好的解決方法:您可以將表單放入一個不可見的iframe中,然後本地提交,並觸發回調,因爲這將是AJAX響應。

jQuery form plugin在提交表單的AJAX方式上真的很棒,並且在遇到文件字段時透明地執行後者。

相關問題