1

假设我有一个带有两个自定义标签<x/><y/>. 每个标签都绑定到一个Heist.Compiled.Splice. GET现在,模板在针对特定路由的每个请求时呈现。我怎么<x/>能被一对的第一个值<y/>替换,被同一对的第二个值替换,但是返回该对的 IO 计算每个请求只运行一次(并且只在该路由上运行,而不是在每个路线,因为有些人根本不会使用模板)?

4

1 回答 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 回答