gpt4 book ai didi

html - 如何独立于外部请求只渲染一次 Widget?

转载 作者:搜寻专家 更新时间:2023-10-31 08:41:06 26 4
gpt4 key购买 nike

Yesod 使网页(由 Widget 构建)在通过 warp 端口从外部请求时呈现为 HTML 变得非常简单。为什么,这当然正是我们通常需要 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...呃。

我如何调用它并获得通常直接发送给客户端的结果 HTML,而不实际将小部件嵌入任何 Handler

所以,我基本上想要

runWidget :: Widget -> MyYesod -> IO Html

             WidgetT MyYesod IO () -> MyYesod -> IO Html

我只是缺少执行此操作的某些功能,还是存在问题——也许小部件实际上比我想象的更强大?如果是这样,将 HTML 和 CSS 的 Writer 一起表达的正确类型是什么

最佳答案

我怀疑,您可以使用 defaultLayout 甚至 widgetToPageContentwithUrlRenderer 将 Widget 变成 Handler 首先,然后使用这个小助手“运行”它:

handler :: Handler a -> IO a
handler h = getAppSettings >>= makeFoundation >>= flip unsafeHandler h

您也可以使用 handler 。 runDB 以这种方式“运行”数据库操作。

关于html - 如何独立于外部请求只渲染一次 Widget?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43969114/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com