2012-06-08 57 views
4

我想教自己封閉模板。我做了一個簡單的文件simply.soy:爲什麼我的Closure模板中的「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} 

我編譯並調用document.write(examples.simple.hiWorld();後,然而,所顯示的字符串有「你好」和「世界」之間沒有空格:的Helloworld!

爲什麼不呢?

回答

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:我添加了一個到'features.soy'的鏈接,其中包含使用'{sp}',{{nil}'加入示例的行。 –

+0

謝謝!好的,所以將任何模板標籤或HTML標籤放在一行的末尾或下一行的開頭都會阻止空格。 '{nil}'恰好是一個什麼也不做的模板標籤。 – dangerChihuahua007

相關問題