Я пытаюсь создать страницу с несколькими подобными формами на одной странице. Каждая форма очень проста, она предоставляет целочисленный ввод и кнопку отправки. Каждая форма соответствует счетчику, и счетчик должен быть увеличен при отправке формы.Какая форма для запуска?
incrementCounterForm :: Entity Counter -> Form (CounterId, Int)
incrementCounterForm (Entity i _) = renderBoostrap3 BootstrapInlineForm
$ (,)
<$> pure i
<*> areq intField "value" Nothing
В моем обработчике GET я
counters <- runDB $ selectList [] [] -- Get all the current counters
forms <- mapM (generateFormPost . incrementCounterForm) counters -- Generate the forms
Тогда в моем хуторе файле я итерацию по формам и сделать их все по отдельности (все они идут в тот же обработчик).
Мой вопрос относится к обработчику POST. Как сделать runFormPost?
((result,_),_) <- runFormPost $ incrementCounterForm undefined
Что должно быть undefined
быть здесь? Я хочу получить счетчик из формы, не нужно ее предоставлять.
EDIT: Я солгал о предоставлении произвольного счетчика рабочего
Если я обеспечить произвольные Entity Counter
это, кажется, работает (при условии, счетчик не используется в результате). Тем не менее, я не могу оставить его как undefined
, потому что runFormPost, кажется, его оценивает.
Я под ложным впечатлением, что 'pure' будет вставлять скрытое поле ввода? – Alpaca
Действительно, изменение его с 'pure' на' isq hiddenField "" (Just i) 'заставляет его работать, если я предоставляю произвольное поле' Entity Counter'. Все еще не работает с неопределенным. – Alpaca
Одним из подходов, которые вы можете предпринять, является перемещение идентификатора счетчика в URL-адрес. Я не уверен, как выглядит ваша текущая структура URL-адресов, но если вы можете использовать POST в/counters/1/increment или что-то еще, вам не нужно будет хранить идентификатор счетчика в скрытом поле. – MaxGabriel