Я использую yesod 0.9.3 с сайтом лесов. Есть ли способ включить какой-нибудь виджет в результирующую страницу только один раз (или, желательно, сделать какой-нибудь виджет включаемым только один раз), как addScript
и addStylesheet
do? Я могу вызывать такие (зависимые) виджеты в обработчике страницы, но это нарушает саму идею (зависимого) виджета как отдельной сущности, которую вы просто вызываете, когда вам это нужно.
Пример:
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 включен дважды.