kobezzza,
ие нехочет {template helloWorld(name)} up - заработало |
Цитата:
|
Цитата:
В целом, на мой взгляд, перспективный шаблонизатор. upd: кстати, что насчет производительности? http://jsperf.com/javascript-templat...off-extended/2 |
Цитата:
Скорее всего всякие микро-темплейтинги делают трансляцию быстрее, т.к. весь их алгоритм - это сплит по разделителю и new Function. У меня в проекте ~300 шаблонов и их трансляция это примерно 5-10% от общей сборки проекта и на моей машинке делается где то 0.7 секунд, а для сравнения Google Closure Templates делает это секунд за 20 (хз, почему так долго, особенно учитывая, что он написан на яве). Но это всё лирическое отступление:) Если у тебя 10-ок шаблонов и ты компилишь их на клиенте, то это в любом случае сделается очень быстро даже в ИЕ6 и даже на телефоне:) А если у тебя целая куча шаблонов и ты компилишь их не на сборке проекта, то стоит задуматься, а всё ли ты делаешь правильно:) Да и вообще прекомпиляция это даже удобнее: 1) Скомпиленые шаблоны можно пропустить через минификатор вместе с остальным JS и это лишит головной боли с экспортом свойств, если сжатие идёт например через GCC. 2) Скомпилиный шаблон работает "мгновенно", т.к. его не нужно предварительно парсить и т.д. 3) Шаблоны можно и нужно разбивать на разные файлы, а не лепить всё в кучу, и тут всё оч просто с таким подходом. 4) В JS я просто вызываю функцию, а не думаю: "ой, это шаблон, его нужно скомпилить" 5) Не нужно тащить транслятор на клиент: а в моём случае это почти 3к строк. В общем Snakeskin задумывался как шаблонизатор с прекомпиляцией, но а поддержка live-исполнения сделана исключительно для отладки:) Оптимизация ради оптимизации - это пустая трата времени. |
Цитата:
Цитата:
Цитата:
|
Цитата:
Если ты хочешь автоматизировать процесс компиляции на PHP, то просто нужно на сервак поставить любую VM яваскрипта и из пыхи запустить процесс (по моему команда exec, не помню уже). Или ты имел ввиду использование в качестве серверного шаблонизатора? То тогда на пыхе не оч удобно будет, а на той же ноде, то ещё проще :) ЗЫ: http://screencast.com/t/iU7AgM6jvjaj что может быть проще?) |
Цитата:
|
Как тебе такой подход:
// about.tpl @set about (data, value = 0) { &.title: data.title, &.text: value } // me.tpl @set me < about (data) { &.title: data.title } // index.tpl @include about, me @get about { title: title 1 } @get me ({ title: title 2 }, 1) Будет транслированно в: <div class="about"> <div class="about__title"> title 1 </div> <div class="about__text"> 0 </div> </div> <div class="about me"> <div class="about__title me__title"> title 2 </div> <div class="about__text me__text"> 1 </div> </div> Как это будет выглядеть в твоем случае? :) PS: 1. div по-умолчанию, хотя можно определить любой тег, используя селекторную нотацию h1.header 2. & означает конкатенацию (автодополнение для bem) 3. + планирется полная абстракция от тегов (web components), ну и data-binding |
monolithed,
Похоже на BEMHTML от Яндекса чем-то :) Хорошее решение. У меня будет как то так: {template about(data, value = 0)} <div class="{PARENT_TPL_NAME} {TPL_NAME}"> <div class="{PARENT_TPL_NAME ? PARENT_TPL_NAME + '__title' : ''} {TPL_NAME}__title"> {data.title} </div> <div class="{PARENT_TPL_NAME ? PARENT_TPL_NAME + '__text' : ''} {TPL_NAME}__text"> {value} </div> </div> {end} {template me(data, value = 0) extends about} {end} Замечания: Пример у меня выглядит немного неуклюже, т.к. для нормального BEM подхода у меня написана либа, работающая вместе с шаблонизатором. Т.е. сам шаблонизатор изначально не привязан к конкретной технологии, но его гибкость позволяет легко написать любой над-сахар. |
Цитата:
|
Часовой пояс GMT +3, время: 15:09. |