2011-10-19 10 views
11

Obecnie eksperymentuję z Yesod, wykonując polecenie tutorial on the Yesod Wiki.Łącze do pliku statycznego z Hamleta

Najpierw stworzył aplikację jesod korzystając yesod init i stworzył obsługi korzeń, który renderuje plik widget o nazwie homepage:

getRootR = do 
mu <- maybeAuth 
defaultLayout $ do 
    h2id <- lift newIdent 
    setTitle "Home" 
    addWidget $(widgetFile "homepage") 

Mam plik obrazu w statycznej rozmowy katalogu static/img/logo.png

Po dotknięciu Settings/staticFiles.hs, Udało mi się połączyć ten plik od default-layout.hamlet przez

<img [email protected]{StaticR img_logo_png} 

Problem występuje teraz, gdy chcę dołączyć ten plik statyczny do mojego widżetu homepage, używając dokładnie tego samego wiersza kodu. Następujący błąd występuje w kompilacji:

Handler/Root.hs:19:21: 
    Not in scope: `img_logo_png' 
    In the result of the splice: 
     $(widgetFile "homepage") 
    To see what the splice expanded to, use -ddump-splices 
    In the first argument of `addWidget', namely 
     `$(widgetFile "homepage")' 
    In the expression: addWidget ($(widgetFile "homepage")) 

Więc moje pytanie brzmi: w jaki sposób mogę połączyć zasoby statyczne w określonych widgetów z widgetFile, i dlaczego zachowują się inaczej w szablonie domyślny układ?

Odpowiedz

6

Trzeba dodać import do Handler/Root.hs:

import Settings.StaticFiles 

Jeśli osada plik wymaga następnie dowolnie handler.hs plik, który wywołuje, że Hamlet plik będzie musiał go importować pierwszy. Powodem, dla którego default-layout.hamlet nie wymaga żadnych zmian jest to, że jest on wywoływany gdzieś w Wierzę, że Application.hs, który importuje prawie wszystko, w tym statyczne.

Powiązane problemy