2011-08-27 78 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