2015-04-24 2 views
1

Привет Я новичок в Yesod и следую документации, чтобы сделать форму. В документации шаблон формы был создан в самом файле .hs. Но у меня есть отдельная деревушка, где я хочу настроить.Yesod Mform and hamlet

Я хочу получить доступ к «полям» в моем деревенском файле. Ожидаемый тип «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")  
     |] 

Пожалуйста, дайте мне знать, если есть какие-либо недоразумения. У меня есть идея о том, как получить форму из того, как это делается в документации, но я хочу использовать отдельный файл деревушки, так как я хочу настроить внешний вид формы.

Благодаря Sai

EDIT: К сожалению, я не был ясен. Я пытался создать Mform, где вместо создания макета формы в файле «.hs» я хотел указать макет в файле hamlet. Я сделал это через http://pastebin.com/fwpZsKXy. Но после этого я мог разбить его на два файла, как я хотел. Я решил эти ошибки. Спасибо anyways

+0

Если вы получаете ошибки типа, рекомендуется включить сообщения об ошибках в вопрос. Я на самом деле не уверен, что вы пытаетесь достичь здесь, а сопоставление вашего кода с примером кода может привести к путанице (по крайней мере, с моей стороны). –

ответ

1

Я получил его. Мне было не ясно, что вернуть «tableMform extra». Я знаю, что он должен вернуть что-то типа [(FormResult a, xml)] [1]. Но тогда я не был уверен, что тип «forM lis ((w, h) -> mopt intField (fromString w) (Just h))» - строка 2 была, поэтому я следил за тем, что было сделано в документации, сделало это как это было сделано там. (without use of external widget file).

После этого я попытался сделать так, как я хотел сделать, используя отдельные деревушки, julius и lucius файлы. http://pastebin.com/FgGph2CU. Это сработало !!

Таким образом, я не был понят «тип» для «forM lis» ((w, h) -> mopt intField (fromString w) (Just h)) ». Как только я понял это, это было легко.