Yesod 中的确认对话框

发布于 2024-12-01 16:52:55 字数 224 浏览 1 评论 0原文

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

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

What is the simplest way to make a confirmation dialog in Yesod? In some cases, when a form is posted, I want to ask for confirmation before carrying out the action. I imagine this working by sending the user a separate confirmation page, and then processing the posted data if the 'Yes' button is pressed.

I think this should be possible, using functions like setUltDestReferer. The question is, what is the easiest/most typical way to do it in Yesod? Ideally it should boil down to a single function call in the handler, like requireAuth does.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

草莓味的萝莉 2024-12-08 16:52:55

如果我理解正确,您需要一些能够

  1. 呈现一些确认页面并中止进一步处理请求的东西。
  2. 将“是”按钮链接回该处理程序并设置一个标志。
  3. 如果设置了该标志,则不执行任何操作并继续请求。

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

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

可能会更清晰

  1. 相反,创建一个新的 AJAX 处理程序并添加一些 JavaScript 来调用处理程序来检查是否需要确认
  2. 。如果是这种情况,则显示确认信息。
  3. 如果用户单击“是”,则像平常一样继续提交表单。

If I understood this right, you want something that will

  1. Render some confirmation page and abort further processing of the request.
  2. Have the "Yes" button link back to this handler and set a flag.
  3. If the flag is set, do nothing and continue with the request instead.

This immediately raises the question of how the original form data should be carried along. There are ways of solving this, e.g. by storing it in the session or by including it URL encoded in the "Yes" link.

The latter approach works, but can be a bit messy. The former can cause problems when users hit the back button, open links in new tabs and so on. This comes from the stateless design of HTTP.

Instead, it might be cleaner to create a new AJAX handler and add some JavaScript that

  1. Calls the handler to check if confirmation is needed.
  2. Shows the confirmation if that was the case.
  3. If the user clicked "Yes", proceeds with submitting the form as you normally would.
烟花肆意 2024-12-08 16:52:55

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

I recommend you go with @hammar's approach, I think it's the best. If for some reason AJAX isn't an option, you can consider putting a hidden form on the confirmation page containing the form data submitted from the first page. This should be fairly trivial using runRequestBody.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文