Цитата:
|
Выпустил патч 6.3.2
|
Вложений: 1
kobezzza,
а когда будет патч на патч? |
Цитата:
|
kobezzza,
читаю я себе сейчас доку и вижу новое ишью) Значит, готовится патч на патч? :) |
Цитата:
|
Как я и говорил, многие вопросы/проблемы/неочевидности у меня пропали после выхода последних версий SS. Но немного удалось составить для FAQ'а:
1. как подключить не скомпилированный шаблон на страницу (в формате *.ss)? 2. Можно ли объявлять прототип внутри другого прототипа? //ответ уже нашёл, но тем не менее) 3. Как вызвать прототип в месте объявления без параметров? Такого я не нашёл в доке, мб просто проглядел. В результате экспериментов пришёл к такому решению: {proto my_pro() =>} //содержание {/proto} В роде бы работает, но может есть вариант по лучше? 4. В каких случаях лучше использовать Блоки, а в каких Прототипы? //желательно с примерами 5. Можно ли вызвать шаблон внутри шаблона? И два вопроса не для FAQ'а 1. По этой ссылке: https://github.com/kobezzza/Snakeski...86%D0%B8%D1%8F Цитата:
2. Как/можно_ли объявить независимый прототип/блок, который можно использовать в любом шаблоне? Т.е. что-то типа этого: {block blockName(arg)} Вывод из независимого блока {arg} {block} {template a()} {call blockName('аргумент')} {/template} {template b()} {call blockName('другой аргумент')} {/template} |
Цитата:
Цитата:
Цитата:
Цитата:
Отвечу пока кратко тут: прототипы и вызываемые блоки - это методы шаблона, только прототипы приватные, а блоки - публичные, также у них есть некоторые принципиально архитектурные отличия: прототип обрабатывается на этапе трансляции, блок в рантайме, следовательно: прототип увеличивает время трансляции и размер конечного файла, но выполняется супер быстро (+ оптимизация хвостовой рекурсии), но менее гибкий чем блок, а блок быстрее транслируется и занимает меньше места в конечном файле и более гибкий, но работает медленне и нет оптимизации рекурсии, главное, что нужно знать, что их можно использовать друг с другом, т.е. блок вкладывать в протип и наоборот и получать достоинства обеих реализаций. Цитата:
/// Независимый блок - это шаблон {template blockName(arg)} {arg} {/template } {template a()} {call blockName('аргумент')} {/template} {template b()} {call blockName('другой аргумент')} {/template} Вариант наследования более гибкий, т.к. в дочернем шаблоне тот или иной блок или прототип можно переопределить или доопределить с помощью директивы super. Я обычно завожу уровень супершаблонов, в котором реализован базисный функционал и потом наследуюсь от них, как раз для таких задач были введены директивы placeholder и interface. - proto base->logo() ... - proto base->icon() ... - placeholder base() ... - template button() extends base - apply logo() В моём проекте 3-и уровня супершаблонов, это позволят добится максимального code-reuse и очень просто поддерживать. Вообще ОО-подход - это главная фича SS и сделана лучше всего, поэтому не нужно боятся создавать уровни наследования, т.к. сама либа это пропагандирует. *** Спасибо за вопросы, распишу ответы в FAQ, приступлю скорее всего с пятницы, т.к. сейчас завал по другим делам. |
В SS 6.4 появятся анонимные самовызываемые прототипы
https://github.com/kobezzza/Snakeskin/issues/13 |
kobezzza,
Не-не, это я знаю. Я говорю про подключение шаблона из отдельного файла. Например так: <script type="text/x-snakeskin-template" id="templates" src="tmp.ss"></script> Цитата:
<script type="text/x-snakeskin-template" id="templates"> {template blockName(arg)} {arg} {/template } {template a()} {call blockName('аргумент')} {/template} {template b()} {call blockName('другой аргумент')} {/template} </script> <script> var tpls = {}; Snakeskin.compile(document.querySelector('#templates'), { context: tpls }); var out = document.querySelector('.messages'); var name = 'Имя'; var mess = 'Текст сообщения'; out.innerHTML = tpls.a({name, mess}) + out.innerHTML; </script> Чот так не получается( Цитата:
Спасибо за пояснение по другим моментам) |
Часовой пояс GMT +3, время: 00:34. |