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' 。一旦我弄明白了,就很容易了。
您好,我是 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' 。一旦我弄明白了,就很容易了。