Domanda

Attualmente sto sperimentando con Yesod seguendo la tutorial sul Wiki Yesod .

Per prima cosa ho creato un'applicazione utilizzando yesod yesod init, e ha creato un gestore di Root che rende un file chiamato widget di homepage:

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

Ho un file immagine nella statica chiamata directory static/img/logo.png

Dopo Settings/staticFiles.hs toccante, sono riuscito con successo a collegare questo file da default-layout.hamlet tramite

<img src=@{StaticR img_logo_png}

Il problema si verifica ora che voglio includere questo file statico nel mio widget di homepage, utilizzando esattamente la stessa riga di codice. Il seguente errore si verifica in compilazione:

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

Quindi la mia domanda è: Come faccio a collegare risorse statiche nei widget definiti con widgetFile, e perché si comportano in modo diverso nel modello di layout di default

È stato utile?

Soluzione

È necessario aggiungere un'importazione di Handler / Root.hs:

import Settings.StaticFiles

Se un file borgo richiede quindi a seconda di quale handler.hs file chiamate quel file frazione avranno bisogno di importarlo prima. Il motivo per cui default-layout.hamlet non richiede alcuna modifica è perché è chiamato da qualche parte nel Credo Application.hs che ha le importazioni per quasi tutto, compreso roba statica.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top