我跟随Yesod Web框架书(http://www.yesodweb.com/book-1.2/forms Monadic Forms部分)中的Monadic 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文件中吗?或者,如果有更好的方法将处理程序/表单中的视图相关项目分开,那也可以。
我不想使用输入表单,因为如果输入无效,似乎无法捕获它并处理代码中的错误 - 它只是指向错误页面。
谢谢!