2012-01-23 2 views
0

나는 콧수염을 사용하여 서버뿐만 아니라 클라이언트에서도 물건을 렌더링합니다. 전략은 단일 페이지 응용 프로그램 (서버에 콧수염으로 렌더링)이 있고이 템플릿은 서버에서 미리보기를 가져 와서 클라이언트에서 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+"}}")) 

...하지만 분명히 그 즉시지도 (TemplateEngine 라인 (576)에서, 예를 들어) 루프를 통해 처리 될 때 삭제됩니다. 이것을위한 적절한 플러그 포인트는 어디에 있습니까? 내가 scalatra-을 사용하고

...

는 또한 RenderContext에 noneString 및 nullString을 발견했습니다,하지만 난이 변수는 단지 문자열이기 때문에 내가 거기 렌더러 출력에게 키를 만들 수 없다고 생각 scalate 2.0.2 및 scala 2.9.0-1.

답변

2

클라이언트 측에서 채워지는 데이터에 대해 다른 구분 기호를 사용할 수 있습니다. 렌더링 서버 템플릿에

{title : "Hello"} 

앞에 추가하여 대체 구분하고 클라이언트 측 렌더링 :

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

서버 측 데이터 : Set Delimeter

서버 측 템플릿 : 참조하십시오.

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

내가 만든 a working jsFiddle to show it working. Console.log를보고 전후의 서버 템플리트를 확인하십시오.

+0

결국 내가 결국 생각한 전략입니다. 심지어 [[그들은 동일합니다. http://mustache.github.com/mustache.5.html 링크를 추가해야합니다. 그리고 더 중요한 것은, 이것에 대한 대처법이 무섭기 때문에, 당신이 그들을 바꾼 후에 당신의 구획 기호를 공백으로 둘러 쌓아야한다는 것입니다. (계산하는데 수 시간이 걸렸습니다) – iwein

+0

"Set Delimeter"는 http://mustache.github.com/에 링크되어 있습니다. mustache.5.html;) 알아 낸 게 다행이다. – maxbeatty