假设我有一个带有两个自定义标签<x/>和<y/>的Heist模板。每个标签都绑定到一个Heist.Compiled.Splice。现在,针对特定路由的每个GET请求都会呈现该模板。如何才能让<x/>替换为一对的第一个值,<y/>替换为同一对的第二个值,但是返回该对的IO计算在每个请求上只运行一次(并且只在该路由上运行,而不是在每条路由上运行,因为有些路由根本不会使用模板)?
发布于 2013-03-13 22:47:21
您的问题与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 runtimeTupleComputationhttps://stackoverflow.com/questions/15373260
复制相似问题