Yesod中的确认对话框

时间:2011-08-27 10:49:56

标签: haskell yesod

在Yesod中进行确认对话的最简单方法是什么?在某些情况下,当发布表单时,我想在执行操作之前要求确认。我想这可以通过向用户发送单独的确认页面来工作,然后在按下“是”按钮时处理发布的数据。

我认为这应该是可行的,使用setUltDestReferer等函数。问题是,在Yesod中最简单/最典型的方式是什么?理想情况下,它应归结为处理程序中的单个函数调用,如requireAuth。

2 个答案:

答案 0 :(得分:1)

如果我理解这一点,你想要的东西

  1. 渲染一些确认页面并中止对请求的进一步处理。
  2. 将“是”按钮链接回此处理程序并设置标记。
  3. 如果设置了标志,则不执行任何操作,而是继续处理请求。
  4. 这立即提出了如何携带原始表格数据的问题。有解决这个问题的方法,例如通过将其存储在会话中或将其包含在“是”链接中编码的URL。

    后一种方法有效,但可能有点凌乱。当用户点击后退按钮,打开新标签中的链接等时,前者可能会导致问题。这来自HTTP的无状态设计。

    相反,创建一个新的AJAX处理程序并添加一些

    的JavaScript可能更清晰
    1. 调用处理程序以检查是否需要确认。
    2. 如果是这种情况,则显示确认。
    3. 如果用户点击“是”,则按照惯例继续提交表单。

答案 1 :(得分:0)

我建议你选择@ hammar的方法,我认为这是最好的。如果由于某种原因AJAX不是一个选项,您可以考虑在包含从第一页提交的表单数据的确认页面上放置一个隐藏的表单。使用runRequestBody,这应该是相当简单的。