[英]How to use a single per-request computation in multiple splices with Heist?
假设我有一个带有两个自定义标签<x/>
和<y/>
Heist模板。 每个标签都绑定到Heist.Compiled.Splice
。 现在,将在每个GET
请求中针对特定路线呈现模板。 如何用对的第一个值替换<x/>
,用同一对的第二个值替换<y/>
,但是返回该对的IO计算每个请求只能运行一次(并运行仅在该路由上,而不是在每条路由上,因为有些根本不会使用模板)?
您的问题与已编译的拼接教程中的Person示例非常相似。 您需要创建一个父接头,它将执行共享计算。 称其为computeXY
。 您的模板如下所示:
<computeXY>
<p>The first value is <x/>.</p>
<p>The second value is <y/>.</p>
</computeXY>
computeXY
接头将执行计算,并使用runChildrenWith模式将其计算结果作为<x/>
和<y/>
标记提供给其子代。 但是,runChildrenWith模式在编译后的拼接处的工作方式略有不同。 这是使用编写本教程以来添加的新API函数来实现的方法:
import Blaze.ByteString.Builder.Char8 (fromText)
import Heist.Compiled
runtimeTupleComputation = return ("foo", "bar")
splices = [ ("x", fromText . fst)
, ("y", fromText . snd)
]
computeXYSplice = withPureSplices runChildren splices runtimeTupleComputation
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.