Почему в моем шаблоне закрытия нет пробела после слова "Hello"?

Я пытаюсь научить себя шаблонам закрытия. Я сделал простой файл просто.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!

Почему бы и нет?

1 ответ

Решение

Шаблоны закрытия обрабатывают соединение линий следующим образом:

Внутри тела шаблона вы можете делать отступы строк столько раз, сколько хотите, потому что компилятор шаблонов удаляет все разделители строк и пробелы в начале и конце строк, включая пробелы, предшествующие комментарию в конце строки. Компилятор полностью удаляет пустые строки, состоящие только из пробелов. Последовательные строки объединяются в соответствии со следующей эвристикой: если место объединения ограничивает шаблон или тег 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}
Другие вопросы по тегам