Yesod 形式和小村庄

Yesod Mform and hamlet

您好,我是 yesod 的新手,正在按照文档制作表格。在文档中,表单模板是在 .hs 文件本身中创建的。但是我有一个单独的小村庄,我想在其中自定义。

我想访问我的 hamlet 文件中的 "fields"。 'generateFormPost' 的预期类型是 (xml, Enctype) 。谁能告诉我应该从 'tableMform extra' 返回什么。我认为它应该是 xml 格式。但我认为我不应该像下面的文档示例那样使用 toWidget。

tableMform extra = do
    fields <- forM lis (\(w,h) -> mopt intField "this is not used" (Just h) )
    return (fields)      ---I know this line has the type error. Can anybody suggest how to deal with it

{-  
--I am referring this code from yesod website to make my form. In this it was using runFormGet, but I want use generateFormPost and moreover it was creating a widget which is used in displaying the website. I don't want to create the widget here but in my hamlet file where the 'fields' is accessed via interpolation.

personForm :: Html -> MForm Handler (FormResult Person, Widget)
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
    let widget = do
            toWidget
                [lucius|
                    ##{fvId ageView} {
                        width: 3em;
                    }
                |]
            [whamlet|
                #{extra}
                <p>
                    Hello, my name is #
                    ^{fvInput nameView}
                    \ and I am #
                    ^{fvInput ageView}
                    \ years old. #
                    <input type=submit value="Introduce myself">
            |]
    return (personRes, widget)

-}

getHomeR :: Handler Html
getHomeR = defaultLayout $ do
    -- Generate the form to be displayed
    (fields, enctype) <- generateFormPost tableMform
    let (fires,fiview) = unzip fields
    $(widgetFile "layout")       
        |]

如有误会请告知。我知道如何从文档中完成的方式获取表单,但我想使用单独的 hamlet 文件,因为我想自定义表单的外观。

谢谢 赛

编辑: 抱歉,我没说清楚。我试图制作一个 Mform,而不是在“.hs”文件中创建表单布局,我想在 hamlet 文件中提供布局。我已经通过 http://pastebin.com/fwpZsKXy 完成了。但在这样做之后,我可以根据需要将它分成两个文件。我已经解决了这些错误。无论如何谢谢

我明白了。我不清楚 "tableMform extra" 对 return 有什么影响。我知道它必须 return 类型为 [(FormResult a, xml)][1] 的东西。但是后来我不确定 "forM lis ((w,h) -> mopt intField (fromString w) (Just h) )" - 第 2 行的类型是什么,所以我按照文档中所做的按照在那里完成的方式进行了操作。(without use of external widget file)。

这样做之后,我尝试按照我想做的方式去做,即使用单独的 hamlet、julius 和 lucius 文件。 http://pastebin.com/FgGph2CU。成功了!!

总而言之,我不清楚 "forM lis ((w,h) -> mopt intField (fromString w) (Just h) )" 的 'type' 。一旦我弄明白了,就很容易了。