2

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

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

4

2 回答 2

1

如果我理解正确,你想要的东西会

  1. 呈现一些确认页面并中止对请求的进一步处理。
  2. 将“是”按钮链接回此处理程序并设置一个标志。
  3. 如果设置了标志,则什么也不做,而是继续请求。

这立即提出了如何携带原始表单数据的问题。有一些方法可以解决这个问题,例如将其存储在会话中或将其包含在“是”链接中编码的 URL 中。

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

相反,创建一个新的 AJAX 处理程序并添加一些 JavaScript 可能会更简洁

  1. 调用处理程序以检查是否需要确认。
  2. 如果是这种情况,则显示确认。
  3. 如果用户单击“是”,则继续像往常一样提交表单。
于 2011-08-27T18:09:47.837 回答
0

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

于 2011-08-27T18:14:09.837 回答