включить виджет один раз? - PullRequest
0 голосов
/ 24 ноября 2011

Я использую 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 включен дважды.

1 Ответ

1 голос
/ 28 ноября 2011

самое простое решение - просто поместить addCommonStyle в определение defaultLayout в файле Foundation.hs.

Если вам это не всегда нужно, вы можете просто сделать свою собственную функцию макета, следуя шаблону в лесах defaultLayout, который включает в себя вызов addCommonStyle.

...