2013-03-12 4 views
1

두 개의 사용자 정의 태그 <x/><y/>이있는 단일 강도 템플릿이 있다고 가정 해보십시오. 각 태그는 Heist.Compiled.Splice에 바인딩됩니다. 이제 템플릿은 특정 경로에 대한 각 GET 요청시 렌더링됩니다. <x/>을 쌍의 첫 번째 값으로 대체하려면 어떻게해야합니까? <y/>은 같은 쌍의 두 번째 값으로 바뀌지 만 페어를 반환하는 IO 계산은 요청 당 한 번만 실행됩니다 (해당 경로에서만 실행 됨). 일부는 템플릿을 전혀 사용하지 않기 때문에 모든 경로에서)?Heist로 다중 스플 라이스에서 요청 당 하나의 계산을 사용하는 방법?

답변

1

귀하의 질문은 compiled splices tutorial의 Person 예제와 매우 유사합니다. 공유 계산을 수행 할 상위 스플 라이스를 작성해야합니다. 전화 번호는 computeXY입니다. 템플릿이 다음과 같을 것이다 :

<computeXY> 
    <p>The first value is <x/>.</p> 
    <p>The second value is <y/>.</p> 
</computeXY> 

computeXY 스플 라이스는 계산을 수행하고 <x/><y/> 태그로 그 아이에게 제공하는 계산의 결과를 확인하기 위해 runChildrenWith 패턴을 사용합니다. 그러나 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 
+0

고마워요. – noteed