2011-08-13 60 views
4

我有一個Yesod表單來編輯使用markdown(使用Pandoc處理)編寫的一些靜態頁面的內容。我想有兩個按鈕 - 一個「預覽」按鈕,它處理標記並在表單下顯示結果,還有一個「提交」按鈕,將內容保存到數據庫中。帶多個按鈕的Yesod表單

用Yesod做這件事最簡單的方法是什麼? Yesod書中的所有表單示例都只有一個按鈕。我已經看過了暴露的函數/ api,但我即使添加了多個不同名稱和/或值的提交按鈕到表單中,我也無法弄清楚如何讓Yesod告訴我哪個按下了。

任何人都可以給我一個在Yesod中有多個按鈕的窗體的簡單示例,它會觸發不同的操作?

回答

7

您可以使用輸入表單函數來獲取原始值,並在各個按鈕上顯式設置一個名稱屬性。像這樣的HTML:

<input type="submit" name="preview" value="Preview"> 

而在Haskell代碼:

res <- runFormPost ... 
isPreview <- runInputPost $ iopt boolField "preview" 
if isPreview then ... else ... 

很抱歉,如果這不進行類型檢查,我沒有我的正常的開發系統現在。但我認爲這是正確的一般方法。

+0

我實際上找不到runInputPost。在最新版本的yesod-form中,它在Yesod.Form.Input中。但是,Yesod hackage的最新版本是0.8.2.1,它取決於舊版本的yesod-form,即0.1。*。我需要更新到更新版本的Yesod才能使用此方法嗎?如果是這樣,新版本將在何時在Hackage上? – chrisdb

+0

對不起,我以爲你是在測試版本,我的錯誤。你可以使用當前yesod-form的等價函數,即'runFormPost''和'stringInput'。我們希望明天發佈0.9版本的候選版本。 –

+0

我已經下載了它,但我遇到了問題。 yesod-json依賴於一種叫做'aeson-native'的東西,它不在hackage上。它只是艾森嗎? – chrisdb