2011-08-13 37 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