0

我正在使用带有脚手架站点的 yesod 0.9.3。有什么方法可以将某些小部件仅包含在结果页面中一次(或者,最好使某些小部件仅包含一次),就像addScript这样addStylesheet做?我可以在页面处理程序中调用这样的(依赖)小部件,但这打破了(依赖)小部件作为一个独立实体的整个想法,您只需在需要时调用它。

例子:

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 包含两次。

4

1 回答 1

1

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

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

于 2011-11-28T11:11:58.507 回答