我正在关注 Yesod Web Framework Book(http://www.yesodweb.com/book-1.2/forms Monadic Forms 部分)中的 Monadic Form 示例。该示例展示了如何构造一个小部件并从表单中返回它。但是,我想避免在我的 Handler / Form 中设置样式和查看相关代码,我认为我可以获取所有 FieldView 但我无法弄清楚如何执行此操作,因为runFormPost
返回一个 xml(猜测那是 Widget)。
他们书中的修改代码
personForm :: Html -> MForm Handler (FormResult Person, FieldView, FieldView)
personForm extra = do
(nameRes, nameView) <- mreq textField "this is not used" Nothing
(ageRes, ageView) <- mreq intField "neither is this" Nothing
let personRes = Person <$> nameRes <*> ageRes
return (personRes, nameView, ageView) -- my change and removed all the View related code
在我的处理程序中,我将其称为:
((res, v1, v2), enctype) <- runFormPost personForm
这里有几个问题。(1) 我收到一条错误消息,指出 FieldView 采用另一个参数,并且不确定我输入()
的内容似乎满足编译器,但我不知道为什么这有任何意义。(2) 然后我收到错误消息: Couldn't match expected type
(FormResult a0, xml0)' with actual type
(FormResult Person, FieldView (), FieldView ())'
第二个我认为它与 runFormPost 返回的内容有关。
有人可以帮助我直接获取 FieldViews 的最佳方法,以便我可以将它们适当地放在我的 Hamlet 文件中吗?或者,如果有更好的方法将视图相关项与 Handler / Form 分开,那也可以。
我不想使用输入表单,因为如果输入无效,似乎无法捕获它并处理代码中的错误——它只是指向错误页面。
谢谢!