我在支架网站上使用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包含两次。
答案 0 :(得分:1)
最简单的解决方案是将addCommonStyle
放入defaultLayout
文件中Foundation.hs
的定义中。
如果您不总是需要它,您可以按照包含defaultLayout
调用的脚手架addCommonStyle
中的模式制作您自己的布局功能。