콧수염 템플릿을 사용할 때 누락 된 속성을 처리하기 위해 전략을 꽂을 수 있습니까?

StackOverflow https://stackoverflow.com/questions/8978779

  •  12-11-2019
  •  | 
  •  

문제

서버에서 물건을 렌더링 할 수있는 콧수염을 사용하고 있습니다. 전략은 단일 페이지 앱 (서버에 콧수염이 렌더링) 이고이 템플릿은 서버에서 스 니펫을 가져 와서 클라이언트에서 JSON을 렌더링하도록 사용합니다.

이제 문제는 템플릿과 함께합니다. 서버에서 레이블을 렌더링하고 싶지만 클라이언트에서 렌더링하려면 일부 콧수염 구문을 제자리에 두십시오. 이와 같은 템플릿이 있다고 가정 해 봅시다.

<html>
<head><title>{{label.title}}</title></head>
<body>
    <h1>{{name}}</h1>
    <p>{{description}}</p>
</body>
</html>
.

서버 사이드 렌더링은 레이블을 채우지 만 이제는 컨텍스트에서 볼 수없는 자리 표시자를 제거합니다.

<html>
<head><title>Ze zjerman title</title></head>
<body>
    <h1></h1>
    <p></p>
</body>
</html>
.

스케일레이트에 연결하고 이것을 피할 수있는 방법이 있습니까? 나는 순진히 나가려고 노력했다 :

templateEngine.layout(path, Map(attributes:_*).withDefault((key)=>"{{"+key+"}}"))
.

... 그러나 분명히지도가 루프를 통해 처리되는 즉시 폐기 될 것입니다 (예 : 템플릿 engine 라인 576에서). 이것에 대한 적절한 플러그 포인트는 어디에 있습니까?

또한 렌더링 Context 그러나 렌더러를 출력 할 수 없다고 생각합니다.이 변수는 단지 문자열 일이기 때문에 ...

Scalatra-Scalate 2.0.2 및 Scala 2.9.0-1을 사용하고 있습니다.

도움이 되었습니까?

해결책

클라이언트 측에있는 데이터에 대한 대체 구분 기호를 사용할 수 있습니다.참조 : 설정

서버 측 템플릿 :

<h1>{{title}}</h1>
<p> [[ client.name ]] - [[ client.description ]] </p>
.

서버 측 데이터 :

{title : "Hello"}
.

렌더링 된 서버 템플리트에 대체 구분 기호를 붙이고 클라이언트 측을 렌더링합니다.

var client_template = "{{=[[ ]]=}}" + server_rendered,
client_data = { client : { name : "Max", description : "world"}},
client_rendered = Mustache.render(client_template, client_data);
.

i는 일하고있는 JSFIDDLE를 사용하여 작동합니다 .전후에 서버 템플릿을 보려면 console.log를 확인하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top