您好我是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完成的。但在这之后,我可以根据需要将其分成两个文件。我已经解决了这些错误。不管怎样,谢谢
答案 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))”的“类型”。一旦我弄清楚了,就很容易了。