包括小部件一次?

时间:2011-11-24 05:41:10

标签: haskell yesod

我在支架网站上使用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 个答案:

答案 0 :(得分:1)

最简单的解决方案是将addCommonStyle放入defaultLayout文件中Foundation.hs的定义中。

如果您不总是需要它,您可以按照包含defaultLayout调用的脚手架addCommonStyle中的模式制作您自己的布局功能。