2011-11-24 59 views
0

我使用yesod 0.9.3腳手架的網站。有沒有什麼方法可以將一些小部件包含到結果頁面中(或者,最好使一些小部件僅包含一次),比如addScriptaddStylesheet呢?我可以在頁面處理程序中調用這樣的(依賴項)小部件,但是這會將(依賴)小部件的整個想法作爲一個自包含的實體進行打破,您可以在需要時調用它。包含小部件一次?

實施例:

addCommonStyle :: Widget 
addCommonStyle = toWidgetHead [lucius|.some-class {background: yellow}|] 

styledP :: Text -> Widget 
styledP t = do 
    addCommonStyle 
    [whamlet|<p .some-class>#{t}|] 

getTestR :: Handler RepHtml 
getTestR = defaultLayout $ do 
    styledP "First paragraph" 
    styledP "Second paragraph" 

該結果在HTML與鏈接到樣式表含有

.some-class{background:yellow}.some-class{background:yellow} 
即,addCommonStyle包括兩次

+1

如果您包含一些代碼 - 或者您正在嘗試的示例,這將有助於人們回答您的問題 – ManseUK

+0

您是否看過包含兩次小部件的實例?我的理解是,Yesod確保它只有一次。 –

+0

@JeffFoster,我已經添加了純化示例 –

回答

1

最簡單的解決辦法就是把addCommonStyle放在defaultLayoutFoundation.hs文件裏。

如果你不需要它,你可以根據腳手架defaultLayout中的模式製作自己的佈局功能,其中包括addCommonStyle調用。

+0

引用自己「,但是這打破了(依賴)獨立的實體,您只需在需要時調用它。「 –

+0

是正確的,但通過適當的緩存,在未使用時發送樣式的影響將很小 – mxc