4

私は自分自身にクロージャテンプレートを教えようとしています。簡単なファイルをsimple.soyで作成しました。

{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!

なぜだめですか?

4

1 に答える 1

6

クロージャテンプレートは、次のように行の結合を処理します。

テンプレートコンパイラは、行の残りのコメントの前のスペースを含め、行の先頭と末尾にあるすべての行末記号と空白を削除するため、テンプレートの本体内で、行を必要なだけインデントできます。コンパイラは、空白のみで構成される空の行を完全に削除します。連続する行は、次のヒューリスティックに従って結合されます。結合位置がいずれかの側でテンプレートまたはHTMLタグに隣接している場合、行はスペースなしで結合されます。結合位置がどちらの側でもテンプレートまたはHTMLタグに隣接していない場合、行は正確に1つのスペースで結合されます。

クロージャテンプレートに必要なスペースを追加するには、特殊文字コマンドを使用します{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}
于 2012-06-08T02:00:58.100 に答える