Frage

Ich experimentiere gerade mit Yesod, indem ich dem folge Tutorial über das Yesod -Wiki.

Zuerst habe ich eine Yesod -Anwendung verwendet yesod init, und erstellte einen Root -Handler, der eine Widget -Datei aufgerufen hat homepage:

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

Ich habe eine Bilddatei im statischen Verzeichnisanruf static/img/logo.png

Nach Berührung Settings/staticFiles.hs, Ich habe es erfolgreich geschafft, diese Datei aus zu verknüpfen default-layout.hamlet über

<img src=@{StaticR img_logo_png}

Das Problem tritt jetzt auf, da ich diese statische Datei in meine einbeziehen möchte homepage Widget verwendet genau die gleiche Codezeile. Der folgende Fehler tritt bei der Zusammenstellung auf:

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"))

Meine Frage lautet also: Wie verknüpfe ich statische Ressourcen in Widgets, die mit definiert sind? widgetFile, Und warum verhält es sich in der Standard -Layout -Vorlage unterschiedlich verhält?

War es hilfreich?

Lösung

Sie müssen einen Import zu Handler/Root hinzufügen.

import Settings.StaticFiles

Wenn eine Hamlet -Datei sie erfordert, muss die Hamlet -Datei zuerst importieren. Der Grund, warum Standard-Layout.hamlet keine Änderungen erfordert, liegt darin, dass es irgendwo in I REGEN APPLICE.HS aufgerufen wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top