Yesod는 외부에서 warp
의 포트를 통해 요청할 때마다 HTML로 렌더링되는 웹 페이지 (Widget
에서 작성)를 매우 간단하게 만듭니다. 왜, 물론 그것은 우리가 보통 HTML을 필요로하는 곳입니다.외부 요청과 상관없이 위젯을 한 번만 렌더링하는 방법은 무엇입니까?
하지만 "내부 용"으로 해당 HTML 사본이 필요하며 일반적으로 Handler
설정과 독립적으로 생성 되나요? Widget
은 본질적으로 단지 판독기/기록기 조합이며 Yesod
을 읽고 HTML, CSS 및 JS 결과의 튜플을 작성한다고 생각할 수 있습니다. The documentation itself은 "... 이것은 단지 WriterT
..."입니다. 그래,하지만 ...
newtype WidgetT site m a = WidgetT
{ unWidgetT :: HandlerData site (MonadRoute m) -> m (a, GWData (Route site))
}
handlerdatasiteroutegwdataroute ... ugh.
Handler
에 실제로 위젯을 삽입하지 않고도이 코드를 호출하고 클라이언트에게 바로 보내지는 결과 HTML을 얻으려면 어떻게해야합니까??
그래서, 기본적으로
원하는runWidget :: Widget -> MyYesod -> IO Html
즉
WidgetT MyYesod IO() -> MyYesod -> IO Html
난 그냥이 작업을 수행하거나 문제가 일부 기능 실종 - 아마도 위젯 실제로 내가 생각했던 것보다 더 강력를? 그렇다면 HTML과 CSS의 Writer
을 함께 표현하는 올바른 유형은 무엇입니까?
handler :: Handler a -> IO a
handler h = getAppSettings >>= makeFoundation >>= flip unsafeHandler h
또한 DB를 "실행"을 handler . runDB
를 사용할 수 있습니다
'do {html <- defaultLayout 위젯; sendByEmail 수신자 html}' – Jakub