1

2 つのカスタム タグ<x/><y/>. 各タグは にバインドされていHeist.Compiled.Spliceます。これで、テンプレートはGET特定のルートのリクエストごとにレンダリングされます。<x/>ペアの最初の値に置き換え、同じペアの 2 番目の値に置き換える方法はあり<y/>ますが、ペアを返す IO 計算は要求ごとに 1 回だけ実行されます (すべてではなく、そのルートでのみ実行されます)。テンプレートをまったく使用しない人もいるからです)?

4

1 に答える 1

1

あなたの質問は、コンパイルされた 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 パターンは、コンパイルされた splice では少し異なる動作をします。チュートリアルが書かれてから追加された新しい 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 に答える