2011-08-27 77 views
2

Yesod中確​​認對話框的最簡單方法是什麼?在某些情況下,當表格發佈時,我想在執行操作之前先要求確認。我想通過向用戶發送一個單獨的確認頁面,然後處理髮布的數據(如果按下「是」按鈕)來實現這一點。Yesod中的確認對話框

我認爲這應該是可能的,使用像setUltDestReferer這樣的函數。問題是,在Yesod中最簡單/最典型的方法是什麼?理想情況下,它應該歸結爲處理程序中的單個函數調用,如requireAuth所做的。

+2

那豈不是更好地做到這一點上有一些JavaScript客戶端? – hammar

+0

我想在服務器端而不是通過Javascript來做它的主要原因是我只想在某些情況下要求確認。爲了在客戶端執行邏輯將是可能的,但我必須從數據庫中提取更多數據並將其發送到客戶端。 – chrisdb

回答

1

如果我理解這個權利,你想要的東西,這將

  1. 渲染一些確認頁面,並中止請求的進一步處理。
  2. 讓「Yes」按鈕鏈接回該處理程序並設置一個標誌。
  3. 如果標誌已設置,則不執行任何操作,而是繼續執行請求。

這立即引發了原始表單數據應該如何攜帶的問題。有解決這個問題的方法,例如通過將其存儲在會話中或將其包含在「是」鏈接中編碼的URL中。

後一種方法有效,但可能有點麻煩。前者可能會導致用戶點擊後退按鈕時出現問題,打開新選項卡中的鏈接等等。這來自HTTP的無狀態設計。

相反,它可能是更清潔,以創建一個新的AJAX的處理程序,並添加一些JavaScript代碼

  1. 調用處理程序,以檢查是否需要確認。
  2. 顯示確認是否屬實。
  3. 如果用戶點擊「是」,繼續按照正常方式提交表單。
0

我建議你去@哈馬爾的做法,我覺得這是最好的。如果出於某種原因,AJAX不是一種選擇,您可以考慮在包含從第一頁提交的表單數據的確認頁上放置一個隱藏表單。這應該是相當平凡使用runRequestBody