1

我正在关注 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 分开,那也可以。

我不想使用输入表单,因为如果输入无效,似乎无法捕获它并处理代码中的错误——它只是指向错误页面。

谢谢!

4

0 回答 0