На самом деле, для вызова любой функции (а шаблон - это простая функция) можно использовать простой вывод, аля:
{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, время: 12:07. |