2011-10-19 17 views
11

Attualmente sto sperimentando Yesod seguendo lo tutorial on the Yesod Wiki.Collegamento a un file statico di Hamlet

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

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

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

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

<img [email protected]{StaticR img_logo_png} 

Il problema si verifica ora che voglio includere questo file statico nel mio widget 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?

risposta

6

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

import Settings.StaticFiles 

Se un file borgo richiede quindi a seconda di quale handler.hs di file che richiama quel file frazione avrà bisogno di importarlo prima. Il motivo per cui default-layout.hamlet non richiede alcuna modifica è perché è chiamato da qualche parte in I credo di Application.hs che ha importazioni per praticamente tutto, comprese le cose statiche.

Problemi correlati