На самом деле, для вызова любой функции (а шаблон - это простая функция) можно использовать простой вывод, аля:
{this.header.tpl(name, 'ещё параметр')}
Но дело в том, что на все такие выводы по умолчанию ставится фильтр html, который экранирует всякие вредные сущности:) По сути
{this.header.tpl(name, 'ещё параметр')|!html}
и
{call this.header.tpl(name, 'ещё параметр')}
эквивалентны, т.к. фильтр !html отменяет действие html, но с call как то получше выглядит |
Оказывается, так нельзя:
<script type="text/x-snakeskin-template" id="templates">
<!-- msg -->
{template app.templates.test(data)}
<div></div>
{/template}
</script>
на комменты ругается, если я правильно понял |
Цитата:
<script type="text/x-snakeskin-template" id="templates">
/*
* Мой супер шаблон
*/
{template app.templates.test(data)}
<div></div>
{/template}
</script>
Однако в след версии я планирую добавить возможность комментов, которые не вырезаются парсером, а вставляются в JS, для того чтобы делать анотации для GCC. А зачем тебе понадобилось вне шаблона что-то делать и как ты это планировал потом использовать? |
Цитата:
<script type="text/x-snakeskin-template" id="templates"> ... </script> использовать много шаблонов. Хотел добавить комментарии к каждому из них. Воспользуюсь таким синтаксисом: Цитата:
|
Цитата:
http://screencast.com/t/iU7AgM6jvjaj *** А по поводу подсветки, в WebStorm можно создать новый формат данных и задать ему подсветку, я так и сделал (но тут надо выносить шаблоны в отдельный файлики). ЗЫ: Если очень нужно, я могу добавит в парсер лексему XML комментариев, как комментарий ВНЕ декларации шаблона, это будет не сложно. |
Цитата:
За видео спасибо :) Цитата:
Цитата:
Цитата:
|
Цитата:
1) npm i -g snakeskin 2) Затем создаёшь новый тип данных в шторме (FileTypes) 3) Потом создаёшь новый вотчер (File Watchers) и настраиваешь его У меня параметры такие: Program: C:\Users\kobez_000\AppData\Roaming\npm\snakeskin.c md Arguments: -s $FileName$ -o $FileNameWithoutExtension$.ss.js Working Directory: $FileDir$ Output Path: $FileNameWithoutExtension$.ss.js Если компилишь шаблоны под ноду, то также нужно поставить флаг -n PS: Вместе со след версией выпущу плагин для grunt |
kobezzza, отлично, спасибо :)
|
Сегодня потратил день, на сортировку скопившихся "хотелок" от новой версии Snakeskin и утвердил следующее:
1) Директива
{super}
- для безопасной подстановки тела родительского блока или прототипа в указанное место в дочернем.2) Поддержка параметров для директивы proto Я долго думал над этой фичей, т.к. сама суть прототипов - это "мягкая" декомпозиция шаблона, с поддержкой механизма наследования и безопасной работой, т.е. замена пресловутых вызовов других шаблонов в шаблоне. В общем получается, что сейчас прототипы могут очень ограниченно выполнять свою функцию, т.к. не хватает двух вещей: параметров и поддержки рекурсии. Ожидаемый синтаксис будет таким:
{template foo(param)}
{proto icon(%iconName)}
{param} - {%iconName}
{end}
{apply icon('foo')}
{end}
Разумеется, старый синтаксис прототипов (без указания параметров) останется рабочим. 3) Поддержка рекурсий в прототипах. Хотя прототип напоминает простые функции JS, но на самом деле это не так, поэтому использование рекурсии изначально было запрещено, ввиду некорректной работы транслятора (он уходил в бесконечный цикл), но любую рекурсию можно представить в виде простого цикла, собственно что я и планирую сделать для рекурсивных прототипов. 4) Директива для конструкции switch-case-default 5) Директивы {return} {break} и {continue} для прерывания в теле директив циклов и прерывания общего шаблона (return) 6) Директива-хэлпер для безопасной работы с атрибутами узлов:
<input {attr 'type', 'text'} />
7) Декларация прототипов вне тела шаблона:
/// Прототип getIcon добавится в конец шаблона foo
{proto foo->getIcon}
...
{end}
8) Поддержка JSDoc комментариев: комментарии вида /** ... */ не будут вырезаться из шаблона и будут вставлены в конечный JS, чтобы можно было использовать их при дальнейшем сжатии с помощью GCC. В остальном будут исправления ошибок и различные доработки. Завтра приступаю к реализации. |
Здорово, но большинство опций я вряд ли буду использовать. Это уже для продвинутых "юзеров" :)
|
| Часовой пояс GMT +3, время: 14:22. |