Диалог подтверждения в Yesod - PullRequest
2 голосов
/ 27 августа 2011

Какой самый простой способ сделать диалог подтверждения в Yesod?В некоторых случаях, когда форма публикуется, я хочу запросить подтверждение перед выполнением действия.Я представляю, как это работает, отправляя пользователю отдельную страницу подтверждения, а затем обрабатывая опубликованные данные, если нажата кнопка «Да».

Я думаю, что это должно быть возможно с использованием таких функций, как setUltDestReferer.Вопрос в том, какой самый простой / типичный способ сделать это в Йесод?В идеале это должно сводиться к одному вызову функции в обработчике, как это делает requireAuth.

Ответы [ 2 ]

1 голос
/ 27 августа 2011

Если я правильно понял, вам нужно что-то, что

  1. Отобразит некоторую страницу подтверждения и прервет дальнейшую обработку запроса.
  2. Получите ссылку «Да» на ссылкуэтот обработчик и установить флаг.
  3. Если флаг установлен, ничего не делать и продолжить вместо этого запрос.

Это немедленно поднимает вопрос о том, какими должны быть исходные данные формынесут.Есть способы решения этой проблемы, например, путем сохранения его в сеансе или включения URL-адреса, закодированного в ссылке «Да».

Последний подход работает, но может быть немного запутанным.Первый может вызвать проблемы, когда пользователи нажимают кнопку «Назад», открывают ссылки в новых вкладках и так далее.Это связано с дизайном HTTP без сохранения состояния.

Вместо этого может быть удобнее создать новый обработчик AJAX и добавить JavaScript, который

  1. Вызывает обработчик, чтобы проверить, требуется ли подтверждение.
  2. Показывает подтверждение, если это так.
  3. Если пользователь нажал «Да», процесс отправки формы продолжается, как обычно.
0 голосов
/ 27 августа 2011

Я рекомендую вам придерживаться подхода @ hammar, я думаю, что он лучший.Если по какой-либо причине AJAX не подходит, вы можете разместить на странице подтверждения скрытую форму, содержащую данные формы, отправленные с первой страницы.Это должно быть довольно тривиально, используя runRequestBody.

...