Yesodは、warp
のポートを通じて外部から要求されたときはいつでも、Webページ(Widget
から構築)をHTMLにレンダリングするのが非常に簡単です。なぜなら、それはもちろん、正確には、通常はにはHTMLが必要です。ウィジェットを外部リクエストとは関係なく1回だけレンダリングするには?
しかし、通常のHandler
の設定とは独立して生成された「内部目的」のHTMLのコピーが必要な場合はどうなりますか? Widget
は本質的に単なるリーダー/ライターの組み合わせで、Yesod
を読んで、HTML、CSS、JSの結果のタプルを書いていると思います。 The documentation itselfは "...これは単にWriterT
..."と言っています。 [OK]を、しかし...
newtype WidgetT site m a = WidgetT
{ unWidgetT :: HandlerData site (MonadRoute m) -> m (a, GWData (Route site))
}
ハンドラデーターアウトアウトデータルート... ugh。
実際にウィジェットをHandler
に埋め込むことなく、これを呼び出して通常はクライアントに直接送信される結果HTMLを得るにはどうすればよいですか?
だから、私は基本的にしたい
runWidget :: Widget -> MyYesod -> IO Html
すなわち
WidgetT MyYesod IO() -> MyYesod -> IO Html
は、私はちょうどこれを行い、いくつかの機能が欠けアム、または問題がある - おそらくウィジェットは実際に私が思ったよりも強力ですか?もしそうなら、HTMLとCSSを合わせてWriter
だけを表現する正しいタイプは何でしょうか?
'do {html < - defaultLayout widget; sendByEmail受信者html} ' – Jakub