Yesod Mform和hamlet

时间:2015-04-24 23:43:44

标签: yesod hamlet yesod-forms

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

我想访问"字段"在我的小村文件中。预期类型的​​' generateFormPost'是(xml,Enctype)。任何人都可以告诉我,我应该从桌面上找回什么&extra;' 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,而不是在&#34; .hs&#34;中创建表单的布局。文件,我想在hamlet文件中给出布局。我是通过http://pastebin.com/fwpZsKXy完成的。但在这之后,我可以根据需要将其分成两个文件。我已经解决了这些错误。不管怎样,谢谢

1 个答案:

答案 0 :(得分:1)

我明白了。我不清楚“tableMform extra”必须返回什么。我知道它必须返回类型[(FormResult a,xml)] [1]。但后来我不确定什么类型的“forM lis((w,h) - &gt; mopt intField(fromString w)(只是h))” - 第2行是,所以我按照文档中所做的做了它在那里完成的方式。(without use of external widget file)。

在做完之后,我尝试按照我想要的方式进行操作,即使用单独的hamlet,julius和lucius文件。 http://pastebin.com/FgGph2CU。它工作!!

总之,我不清楚“forM lis((w,h) - &gt; mopt intField(fromString w)(Just h))”的“类型”。一旦我弄清楚了,就很容易了。