Форма Yesod с несколькими кнопками - PullRequest
4 голосов
/ 13 августа 2011

У меня есть форма Yesod для редактирования содержимого некоторых статических страниц, которые написаны с использованием уценки (обрабатываются с помощью Pandoc). Я хочу иметь две кнопки - кнопку «Просмотр», которая обрабатывает разметку и отображает результат под формой, и кнопку «Отправить», которая сохраняет содержимое в базе данных.

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

Может ли кто-нибудь дать мне простой пример формы с более чем одной кнопкой в ​​Yesod, которая запускает различные действия?

1 Ответ

7 голосов
/ 13 августа 2011

Вы можете просто использовать функции формы ввода, чтобы получить необработанные значения, и явно установить атрибут имени на различных кнопках. Примерно так в HTML:

<input type="submit" name="preview" value="Preview">

А в коде Haskell:

res <- runFormPost ...
isPreview <- runInputPost $ iopt boolField "preview"
if isPreview then ... else ...

Извините, если это не проверка типов, у меня сейчас нет нормальной системы разработки. Но я думаю, что это правильный общий подход.

...