假设我有一个包含两个自定义标记<x/>
和<y/>
的Heist模板。每个标记都绑定到Heist.Compiled.Splice
。现在,模板将在每个GET
请求中呈现特定路由。如何将<x/>
替换为对的第一个值,<y/>
替换为同一对的第二个值,但返回该对的IO计算每个请求仅运行一次(和只能在那条路线上运行,而不是在每条路线上运行,因为有些人根本不会使用模板)?
答案 0 :(得分:1)
您的问题与compiled splices tutorial中的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