2011-10-19 36 views
11

Tôi hiện đang thử nghiệm với Yesod bằng cách theo dõi tutorial on the Yesod Wiki.Liên kết đến tệp tĩnh từ Ấp

Trước tiên tôi tạo ra một ứng dụng Yesod sử dụng yesod init, và tạo ra một handler gốc mà ám một tập tin phụ tùng gọi là homepage:

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

Tôi có một file ảnh trong thư mục gọi tĩnh static/img/logo.png

Sau khi chạm Settings/staticFiles.hs, tôi đã quản lý thành công liên kết tệp này từ default-layout.hamlet qua

<img [email protected]{StaticR img_logo_png} 

Vấn đề xảy ra bây giờ tôi muốn bao gồm tệp tĩnh này trong tiện ích homepage của mình, sử dụng chính xác cùng một dòng mã. Các lỗi sau đây xảy ra ở biên soạn:

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

Vì vậy, câu hỏi của tôi là: làm cách nào để liên kết các tài nguyên tĩnh trong widget định nghĩa với widgetFile, và tại sao nó hành xử khác nhau trong các mẫu bố trí mặc định?

Trả lời

6

Bạn cần phải thêm một khẩu để Handler/Root.hs:

import Settings.StaticFiles 

Nếu một tập tin ấp đòi hỏi nó thì bất cứ handler.hs tập tin mà các cuộc gọi mà tập tin ấp sẽ cần phải nhập nó đầu tiên. Lý do tại sao default-layout.hamlet không yêu cầu bất kỳ thay đổi nào là vì nó được gọi ở đâu đó trong ứng dụng Application.hs mà tôi đã nhập vào cho mọi thứ khá nhiều, bao gồm cả các công cụ tĩnh.

Các vấn đề liên quan