2012-06-08 2 views
4

나는 스스로 클로저 템플릿을 가르치려고합니다. 내가 컴파일하고 document.write(examples.simple.hiWorld();를 호출 한 후폐쇄 템플릿에 "Hello"다음에 공백이없는 이유는 무엇입니까?

{namespace examples.simple} 

/** 
* says hello to the world 
* @param? name Optional parameter specifying who you are greeting. 
*/ 
{template .hiWorld} 
    Hello 
    {if $name} 
    {$name}! 
    {else} 
    world! 
    {/if} 
{/template} 

은, 그러나, 표시 문자열이 "안녕하세요"와 "세계"사이에는 공백이 없습니다 : : helloworld를 나는 간단한 파일 simply.soy을했다!

왜 안 되니?

답변

6

Closure Templates 핸들 line joining는 다음과 같이

템플릿의 신체 내에서

, 당신은 많은 템플릿 컴파일러는 모든 라인 종결 및 공백 시작과 라인의 끝을 제거하기 때문에 원하는대로 줄을 들여 수 줄 바꿈 주석 앞에 공백이 포함됩니다. 컴파일러는 공백으로 만 구성된 빈 줄을 완전히 제거합니다. 연속적인 행은 다음 추론에 따라 결합됩니다. 조인 위치가 템플릿 또는 HTML 태그의 양쪽에있는 경우 행은 공백없이 결합됩니다 (). 조인 위치가 양쪽에있는 템플리트 또는 HTML 태그의 경계가되지 않으면 행은 정확하게 하나의 공백으로 결합됩니다.

클로저 템플릿에 공간을 추가하려면 특수 문자 명령 {sp}을 사용하십시오. 불필요한 공백이 삽입 된 경우 {nil} 명령을 사용하여 제거 할 수 있습니다. 행 연결 예제는 features.soy을 참조하십시오.

simple.soy이 될 것입니다 :

{namespace examples.simple} 

/** 
* says hello to the world 
* @param? name Optional parameter specifying who you are greeting. 
*/ 
{template .hiWorld} 
    Hello{sp} 
    {if $name} 
    {$name}! 
    {else} 
    world! 
    {/if} 
{/template} 
+0

많이 명확히 그, 감사합니다! 나는 아직도 {nil}에 대해 혼란 스럽다. 템플릿 블록 앞뒤에 공백이 삽입되지 않으면 왜 {nil}이 필요합니까? 제거 할 공간이 있습니까? – dangerChihuahua007

+1

@DavidFaux :'{sp}','{nil} '을 사용하는 라인 조인 예제가 들어있는'features.soy'에 대한 링크를 추가했습니다. –

+0

감사합니다. 좋아, 그래서 어떤 템플릿 태그 또는 HTML 태그를 줄의 끝에 또는 다음 줄의 시작 부분에 배치하면 공백이 생기지 않습니다. '{nil}'은 아무 것도하지 않는 템플리트 태그입니다. – dangerChihuahua007

관련 문제