Javascript-форум (https://javascript.ru/forum/)
-   Ваши сайты и скрипты (https://javascript.ru/forum/project/)
-   -   TrueTemplates - самый быстрый или безопасный шаблонизатор (https://javascript.ru/forum/project/10649-truetemplates-samyjj-bystryjj-ili-bezopasnyjj-shablonizator.html)

tenshi 14.07.2010 01:42

TrueTemplates - самый быстрый или безопасный шаблонизатор
 
использовать так:

var wrongField= TT.string( 'field "{0}" is not found' )
..
throw wrongField([ 'xxx' ])

var makeUserTagLink= TT.uri( '/user/{user}/tag/{tag}' )
..
location.href= makeUserTagLink({ user: 'tenshi', tag: 'xxx' })

var makeContent= TT.dom( '<h1>{title}</h1><p>{text}</p>' )
..
contentNode.appendChild( makeContent({ ttle: 'xxx', text: 'xxx not found' }) )

скачать: http://bca07c6c88b166729f9741ef748fc...oject/tt/tt.js - 2.5кило

Octane 14.07.2010 01:49

Какой-то API неудобный, почему бы не сделать так:
var wrongField = new TrueTemplate("field “{0}” is not found");
throw wrongField.match(["xxx"])

?

--------
а… там разные типы, ну все равно не очевидно, что string, uri или dom вернут функцию.


--------
Даже если от new избавится:
var wrongField = TrueTemplate("field “{0}” is not found");
throw wrongField.match(["xxx"])
было бы удобнее, чем возвращать фукнцию.

А необходимость автоматического encodeURIComponent и парсинга HTML в функционале шаблонизатора сомнительна.

tenshi 14.07.2010 02:16

а что нужно вызвать match - это очевидно? х)

Octane 14.07.2010 02:31

Да. Все эти func(…)(…)(…)(…)(…)… только чтобы поиграться, показать насколько JS крутой, а в скриптах массового использования, думаю, лучше применять привычную всем схему:
var object = new Constructor(…);
object.method(…)

tenshi 14.07.2010 09:16

"привычная всем схема" не удобна в использовании

B~Vladi 14.07.2010 09:55

Цитата:

Сообщение от tenshi
"привычная всем схема" не удобна в использовании

Вчера прочитал статью по этому шаблонизатору. Код пугает немного. Например:
var link= TT.dom( '<a href="{uri}">{title}</a>' )({ uri: '/', title: 'на старт' })

Это же можно сделать проще, выполняя одну функцию вместо двух.

Насколько я понял, шаблонизатор не умеет использовать в качестве шаблона DOM-ноды?

B~Vladi 14.07.2010 14:37

Цитата:

Сообщение от tenshi
TrueTemplates

:)

По мне так это не шаблонизатор, а навороченый sprintf.

Gvozd 14.07.2010 15:15

Цитата:

Сообщение от B~Vladi
По мне так это не шаблонизатор, а навороченый sprintf.

все шаблонизаторы с этого начинались.
а затем, приходит необходимость вносить в шаблоны логику, и идея разделения контента и логики рушится

Kolyaj 14.07.2010 15:17

Цитата:

Сообщение от Gvozd
и идея разделения контента и логики рушится

Нет такой идеи. Есть идея разделения бизнес-логики и логики отображения. В обоих случаях нужна логика. Просто одна не должна вмешиваться в другую.

x-yuri 14.07.2010 15:24

Цитата:

Сообщение от B~Vladi
Это же можно сделать проще, выполняя одну функцию вместо двух.

проще - не всегда лучше, один - не всегда лучше, чем два ;)

B~Vladi 14.07.2010 15:27

Цитата:

Сообщение от x-yuri
проще - не всегда лучше, один - не всегда лучше, чем два

Спасибо, КО, но это не тот случай, имхо.

tenshi 14.07.2010 20:44

Цитата:

Это же можно сделать проще, выполняя одну функцию вместо двух.
сначала идёт компиляция шаблона. один раз, при старте приложения. потом уже этому откомпилированному шаблону скармливаются данные.

Цитата:

Насколько я понял, шаблонизатор не умеет использовать в качестве шаблона DOM-ноды?
это как, например?

B~Vladi 14.07.2010 21:11

Цитата:

Сообщение от tenshi
это как, например?

В место текста передать ноду:
var link= TT.dom(dom)({ uri: '/', title: 'на старт' })

где dom что-то вроде этого:
<a href="{uri}">{title}</a>

tenshi 14.07.2010 21:23

в фф будет что-то вроде этого:

<a href="http://example.org/sample/path/%23uri%24">{title}</a>

B~Vladi 14.07.2010 21:45

Цитата:

Сообщение от tenshi
в фф будет что-то вроде этого:

Не обязательно выдирать код из документа. Да и фигурные скобки можно заменить.

Вот к примеру, есть у меня табы. Их можно удалять/добавлять. Для добавления таба необходимо как минимум 2 ноды - вкладку и контейнер для контента.
Можно создавать это динамически, но тогда данные (html) будут внутри логики (js), что не есть кошерно. Хранить эти же данные в виде строки ещё хуже - вдруг будет большой кусок? Правильнее, я считаю, брать эти "шаблоны" из html (либо ещё откуда, но не из js-кода). Как в таком случае использовать шаблонизатор? innerHTML вытаскивать постоянно? Конечно, можно это прикрутить к самому шаблонизатору, но это не самый надежный вариант.

Это просто мысли в слух, так сказать:)

Kolyaj 14.07.2010 21:46

Цитата:

Сообщение от tenshi
в фф будет что-то вроде этого:

Да везде будет что-то вроде этого.

tenshi 14.07.2010 22:09

Цитата:

Не обязательно выдирать код из документа.
в таком случае поддержка нод в качестве шаблонов не нужна

Цитата:

Да и фигурные скобки можно заменить.
не на что..

Цитата:

Правильнее, я считаю, брать эти "шаблоны" из html (либо ещё откуда, но не из js-кода). Как в таком случае использовать шаблонизатор?
бери откуда хочешь. я не хочу встраивать в шаблонизатор свой аякс, блекджек и прочие свистелки, как это сделали в EJS.

tenshi 14.07.2010 22:12

механизм доставки шаблонов в яваскрипт может быть любым, в зависимости от проекта. у нас, например, из jsp-шаблоны трансформируются при компиляции в js-шаблоны и подгружаются в отдельную глобальную переменную.

x-yuri 14.07.2010 22:13

Цитата:

Сообщение от B~Vladi
Спасибо, КО, но это не тот случай, имхо.

если не понял, я имел в виду, что это тот случай

Цитата:

Сообщение от B~Vladi
Можно создавать это динамически, но тогда данные (html) будут внутри логики (js), что не есть кошерно. Хранить эти же данные в виде строки ещё хуже - вдруг будет большой кусок? Правильнее, я считаю, брать эти "шаблоны" из html (либо ещё откуда, но не из js-кода).

кошерно и правильно требуют обоснования. А в большинстве случаев они означают "по религиозным убеждениям" ;)

p.s. и ты не пропустил это сообщение?

B~Vladi 14.07.2010 22:26

Цитата:

Сообщение от tenshi
я не хочу встраивать в шаблонизатор свой аякс

А кто говорил про аякс?

Цитата:

Сообщение от x-yuri
кошерно и правильно требуют обоснования

http://ru.wikipedia.org/wiki/MVC
ну и:
Цитата:

Сообщение от B~Vladi
Это просто мысли в слух, так сказать

Цитата:

Сообщение от tenshi
в таком случае поддержка нод в качестве шаблонов не нужна

В таком случае поддержка синтаксиса html в шаблонах не нужна. JSON куда лучше с этим справится.

tenshi 14.07.2010 22:35

Цитата:

А кто говорил про аякс?
ты предлагаешь транспорт шаблонов их хтмл встроить в шаблонизатор. это не его уровня задача.
Цитата:

В таком случае поддержка синтаксиса html в шаблонах не нужна.
её и нету
Цитата:

JSON куда лучше с этим справится.
с чем?

B~Vladi 14.07.2010 22:42

Цитата:

Сообщение от tenshi
ты предлагаешь транспорт шаблонов их хтмл встроить в шаблонизатор

Я не предлагал, а только спросил есть или нет.
Цитата:

Сообщение от tenshi
это не его уровня задача

Его уровня задача из шаблона сделать ноду? По-моему одно и то же, только в другую сторону.
Цитата:

Сообщение от tenshi
её и нету

а это что?
Цитата:

Сообщение от tenshi
<h1>{title}</h1><p>{text}</p>

Цитата:

Сообщение от tenshi
с чем?

с поддержкой синтаксиса html в шаблонах

tenshi 14.07.2010 23:04

Цитата:

Его уровня задача из шаблона сделать ноду? По-моему одно и то же, только в другую сторону.
да, его задача - сделать то, что нам надо, подставив данные в шаблон. а вот вставлять полученные ноды в документ - не его задача

tenshi 14.07.2010 23:06

Цитата:

а это что?
это текст, содержащий угловые скобки

Цитата:

с поддержкой синтаксиса html в шаблонах
какая связь между json и html?

tenshi 14.07.2010 23:08

шаблонизатор и продуцируемые им шаблоны - чистые функции, без каких-либо побочных явлений. соответственно ни данные, ни шаблоны ниоткуда самостоятельно не выковыриваются и никуда самостоятельно не вставляются

B~Vladi 14.07.2010 23:10

Цитата:

Сообщение от tenshi
это текст, содержащий угловые скобки

Это у тебя он содержит. И они тут не причем, т.к. мы говорили о поддержке такого представления в виде шаблона. Основная мысль в том, что шаблон может нам вернуть ноду (не важно в каком виде пришел шаблон), а принять её не может.

Цитата:

Сообщение от tenshi
какая связь между json и html?

Я говорил не о технологиях, а о формате шаблона. Если JSON будет форматом шаблона, это, как минимум, сократит его объем. На крайняк можно придумать другой формат шаблона, например те же селекторы. Почему именно html?

B~Vladi 14.07.2010 23:16

Цитата:

Сообщение от tenshi
чистые функции, без каких-либо побочных явлений. соответственно ни данные, ни шаблоны ниоткуда самостоятельно не выковыриваются и никуда самостоятельно не вставляются

Вот это правильно:)

tenshi 14.07.2010 23:17

а почему он должен её принимать? х)

потому что не надо изобретать своих языков разметки - это ни к чему хорошему не приведёт.

Gozar 14.07.2010 23:21

Цитата:

Сообщение от tenshi (Сообщение 63822)
потому что не надо изобретать своих языков разметки - это ни к чему хорошему не приведёт.

требует доказательства

B~Vladi 14.07.2010 23:24

Цитата:

Сообщение от tenshi
а почему он должен её принимать?

Да не должен, успокойся:)
Просто у меня свое видение на счет шаблонизатора, вот и интересуюсь, чо да как.

Цитата:

Сообщение от tenshi
потому что не надо изобретать своих языков разметки

Заметь, я предлагал существующие варианты синтаксиса.

tenshi 14.07.2010 23:29

какое видение?

какой смысл писать шаблоны на языке, отличном от целевого?

B~Vladi 14.07.2010 23:42

Цитата:

Сообщение от tenshi
какое видение?

В моем представлении, шаблоны данных (html) должны быть в чистом виде (html/xml), т.е. в виде тех же данных, а не строка или ещё чего либо.

Цитата:

Сообщение от tenshi
какой смысл писать шаблоны на языке, отличном от целевого?

Да не уговариваю я тебя, мнением интересуюсь. Почему у тебя так, а не, например, так.

tenshi 14.07.2010 23:46

ну, я в принципе согласен ^^ я вообще сторонник xslt
но кроме html есть ещё много применений шаблонам.. те же uri

B~Vladi 15.07.2010 00:00

Цитата:

Сообщение от tenshi
ну, я в принципе согласен

Ну хоть кто-то со мной согласен:)
Kolyaj, например, любит со мной поспорить:)

x-yuri 15.07.2010 00:59

Цитата:

Сообщение от B~Vladi
http://ru.wikipedia.org/wiki/MVC

это ничего не обосновывает. Есть логика представления и есть бизнес-логика, и шаблон - это не только html, но и логика. На каком она языке (javascript, php, etc) не важно. Ты можешь хранить разметку (html), внешний вид (css) и бизнес-логику (js) в отдельных файлах. Но если разметка динамическая, то в этом же файле будет и логика представления, например, на js. И никак это MVC не противоречит

кстати, для тех кто не в курсе, тут недавно еще один шаблонизатор "пробегал", и B~Vladi на него, похоже, намекал местами

Цитата:

Сообщение от B~Vladi
Kolyaj, например, любит со мной поспорить

и я, я тоже люблю с тобой поспорить :) особенно, когда ты говоришь "Я считаю, правильно было бы..." ;)

tenshi 15.07.2010 02:13

шаблон - это только html. а вот view - это не только шаблон.

B~Vladi 15.07.2010 08:20

Цитата:

Сообщение от x-yuri
это ничего не обосновывает

Это говорит о том, что не по "религиозным убеждениям", а по известному шаблону проектирования.
Цитата:

Сообщение от x-yuri
Есть логика представления

Да нет логики представления. "Такой же, но с перламутровыми пуговками" - где логика?
Цитата:

Сообщение от x-yuri
шаблон - это не только html

Я считаю, что шаблоном могут быть только данные. Шаблон поведения ты как себе представляешь? И как его можно преобразовывать?
Цитата:

Сообщение от x-yuri
и я, я тоже люблю с тобой поспорить особенно, когда ты говоришь "Я считаю, правильно было бы..."

Аха, я в курсе. А у вас своего мнения нет, всё ссылки какие-то даёте.

Kolyaj 15.07.2010 12:13

Цитата:

Сообщение от B~Vladi
Kolyaj, например, любит со мной поспорить

Не люблю, ты провокатор.

Цитата:

Сообщение от B~Vladi
Да нет логики представления.

Вот например. Но я демонстративно промолчу. :)

B~Vladi 15.07.2010 13:40

Цитата:

Сообщение от Kolyaj
Не люблю, ты провокатор.

Ты сам этого не замечаешь наверно.
Цитата:

Сообщение от Kolyaj
Но я демонстративно промолчу.

А ты демонстратор:D

tenshi 05.10.2010 01:07

и программа - это тоже данные х)


Часовой пояс GMT +3, время: 07:52.