Safort, если не сложно, можешь составить список вопросов, которые возникали у тебя по мере обучения SS, нужно для FAQ
|
kobezzza,
могу. Хотя большинство из них возникало из-за невнимательного чтения документации) К какому времени это нужно? |
Цитата:
|
kobezzza,
Цитата:
Цитата:
|
|
kobezzza,
Цитата:
Цитата:
|
Цитата:
|
Как я понимаю, при использовании новой версии параметр https://github.com/kobezzza/Snakeski...ompile#exports вообще не нужен?
Обновился. Убрал параметр exports, в роде бы всё норм. Прям годнота) |
Цитата:
exports = amd или es6-module *** Блин вот знал, что так будет...карочe, 6.3.1 :-/ |
kobezzza,
Цитата:
"Поспешишь - людей насмешишь", особенно когда ночью пишешь) Я тут пересматриваю свои вопросы и код на форуме по поводу SS. Большинство из них просто потеряли актуальность с выходом последних версий) |
Цитата:
|
Выпустил патч 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> Чот так не получается( Цитата:
Спасибо за пояснение по другим моментам) |
Не получается, потому что у тебя же нода, а там шаблоны ставятся как свойства объекта exports или заданного context, т.е. нужно явно указывать, но в SS есть предопределенная переменная self, которая ссылается либо на exports, либо на глобальный объект браузера, т.е. нужно написать
{call self.blockName('аргумент')} При использовании в браузере это можно опустить, но тогда шаблон станет не переносимым. Цитата:
Кстати подумал, что надо бы добавить автоинициализацию text/x-snakeskin-template шаблонов. Цитата:
|
kobezzza,
Цитата:
Цитата:
Цитата:
Цитата:
|
Цитата:
Цитата:
Цитата:
Цитата:
|
kobezzza,
Цитата:
На локалке удобнее) Цитата:
Цитата:
|
Цитата:
{call self.blockName()} Но ты подкинул мне идею, постараюсь упростить этот механизм в SS 6.4 https://github.com/kobezzza/Snakeskin/issues/14 Цитата:
|
Что-то тема затихла.. АП.
|
Приступил к разработке SS 6.4, релиз будет в конце недели.
|
Завтра выкачу релиз SS 6.4, список обновлений:
https://github.com/kobezzza/Snakeski...ISTORY.md#v640 |
Из-за багов релиз перенесён на 1-2 дня :(
|
kobezzza,
Лучше так, чем потом внезапные баги) |
Цитата:
Цитата:
|
В догонку к планируемому релизу добавил новую фичу: ссылку на активный узел (если renderMode = 'dom')
< .b-foo < .&__cell ? console.log($0) /// <div class="b-foo__cell"> (HTMLDivElement) ? console.log($0.parentNode) /// <div class="b-foo"> (HTMLDivElement) ? console.log($0) /// <div class="b-foo"> (HTMLDivElement) ? console.log($0) /// undefined Таким образом появилась возможность работать с DOM деревом ещё в момент генерации шаблона. |
Пилю FAQ: https://github.com/kobezzza/Snakeskin/wiki/faq
Завтра закончу и обновлю общую доку. Релиз также сделаю завтра. |
Выпустил SS 6.4
Скорее всего, что это будет последний мажорный релиз в этом году. *** Также обновил доку и доделал FAQ. |
kobezzza,
релиз пока не попробовал, но FAQ годный получился) |
Выпустил традиционный послерелизовый патч :)
|
Выпустил SS v6.5.
Небольшое обновление, помимо фиксов багов добавился новый параметр useStrict (по умолчанию true). |
Выпустил очередное обновление: 6.5.5
ЗЫ: сёня ревьювил код и офигел от мастштабов до которых разросся SS :) |
У Snakeskin появился логотип-талисман:
![]() Я назвал его Фрэнк :) |
kobezzza, сам рисовал?)
|
Часовой пояс GMT +3, время: 02:04. |