为什么Closure模板中的“Hello”之后没有空格?

时间:2012-06-08 00:51:20

标签: google-closure-templates

我正在尝试自学Closure模板。我简单地制作了一个简单的文件。所以:

{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();后,显示的字符串在“Hello”和“world”之间没有空格:Helloworld!

为什么不呢?

1 个答案:

答案 0 :(得分:6)

Closure Templates处理line joining如下:

  

在模板的主体内,您可以根据需要缩进行,因为模板编译器会删除行的开头和结尾处的所有行终止符和空格,包括其余行注释之前的空格。编译器完全删除仅包含空格的空行。根据以下启发式连接连续行:如果连接位置在任一侧与模板或HTML标记相邻,则行连接时没有空格。如果连接位置没有在任何一侧与模板或HTML标签相邻,则这些行只用一个空格连接。

要在Closure模板中添加需要一个空格的空间,请使用特殊字符命令{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}