假设我有一个带有两个自定义标签<x/>
和<y/>
. 每个标签都绑定到一个Heist.Compiled.Splice
. GET
现在,模板在针对特定路由的每个请求时呈现。我怎么<x/>
能被一对的第一个值<y/>
替换,被同一对的第二个值替换,但是返回该对的 IO 计算每个请求只运行一次(并且只在该路由上运行,而不是在每个路线,因为有些人根本不会使用模板)?
问问题
101 次
1 回答
1
您的问题与已编译拼接教程中的 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
于 2013-03-13T14:47:20.583 回答