Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #331 (permalink)  
Старый 08.11.2014, 23:54
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Цитата:
"Поспешишь - людей насмешишь", особенно когда ночью пишешь)
Это точно
__________________
kobezzza
code monkey
Ответить с цитированием
  #332 (permalink)  
Старый 09.11.2014, 16:49
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Выпустил патч 6.3.2
__________________
kobezzza
code monkey
Ответить с цитированием
  #333 (permalink)  
Старый 09.11.2014, 18:17
Аватар для Safort
Профессор
Отправить личное сообщение для Safort Посмотреть профиль Найти все сообщения от Safort
 
Регистрация: 23.12.2013
Сообщений: 1,856

kobezzza,
а когда будет патч на патч?
Изображения:
Тип файла: jpg 61029428_586pxTrollface_HD.jpg (15.2 Кб, 1 просмотров)
Ответить с цитированием
  #334 (permalink)  
Старый 09.11.2014, 18:21
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Цитата:
kobezzza,
а когда будет патч на патч?
Бывало уже
__________________
kobezzza
code monkey
Ответить с цитированием
  #335 (permalink)  
Старый 09.11.2014, 21:29
Аватар для Safort
Профессор
Отправить личное сообщение для Safort Посмотреть профиль Найти все сообщения от Safort
 
Регистрация: 23.12.2013
Сообщений: 1,856

kobezzza,
читаю я себе сейчас доку и вижу новое ишью)
Значит, готовится патч на патч?
Ответить с цитированием
  #336 (permalink)  
Старый 09.11.2014, 22:27
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Сообщение от Safort Посмотреть сообщение
kobezzza,
читаю я себе сейчас доку и вижу новое ишью)
Значит, готовится патч на патч?
Там какие то мутные баги, сейчас нет времени на них, в конце недели займусь
__________________
kobezzza
code monkey
Ответить с цитированием
  #337 (permalink)  
Старый 10.11.2014, 20:17
Аватар для Safort
Профессор
Отправить личное сообщение для Safort Посмотреть профиль Найти все сообщения от Safort
 
Регистрация: 23.12.2013
Сообщений: 1,856

Как я и говорил, многие вопросы/проблемы/неочевидности у меня пропали после выхода последних версий SS. Но немного удалось составить для FAQ'а:

1. как подключить не скомпилированный шаблон на страницу (в формате *.ss)?

2. Можно ли объявлять прототип внутри другого прототипа?
//ответ уже нашёл, но тем не менее)

3. Как вызвать прототип в месте объявления без параметров?
Такого я не нашёл в доке, мб просто проглядел. В результате экспериментов пришёл к такому решению:
{proto my_pro() =>}
//содержание
{/proto}

В роде бы работает, но может есть вариант по лучше?

4. В каких случаях лучше использовать Блоки, а в каких Прототипы?
//желательно с примерами

5. Можно ли вызвать шаблон внутри шаблона?



И два вопроса не для FAQ'а
1.
По этой ссылке:
https://github.com/kobezzza/Snakeski...86%D0%B8%D1%8F

Цитата:
Внутри шаблонов или внешних прототипов / блоков, или в глобальной области, необходим закрывающий end.
Но в примерах на той странице нигде не применяется закрывающий end, как так?)

2.
Как/можно_ли объявить независимый прототип/блок, который можно использовать в любом шаблоне?

Т.е. что-то типа этого:
{block blockName(arg)}
  Вывод из независимого блока
  {arg}
{block}


{template a()}
  {call blockName('аргумент')}
{/template}

{template b()}
  {call blockName('другой аргумент')}
{/template}
Ответить с цитированием
  #338 (permalink)  
Старый 10.11.2014, 21:49
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Цитата:
1. как подключить не скомпилированный шаблон на страницу (в формате *.ss)?
https://github.com/kobezzza/Snakeski...B5%D1%80%D0%B5

Цитата:
{proto my_pro() =>}
//содержание
{/proto}
Да, мне казалось это очевидно, спс за наводку

Цитата:
Можно ли вызвать шаблон внутри шаблона?
Конечно, ты же можешь вызывать любую функцию в шаблоне, а шаблон - это функция, есть даже сахарок для этой задачи: https://github.com/kobezzza/Snakeskin/wiki/call

Цитата:
4. В каких случаях лучше использовать Блоки, а в каких Прототипы?
Тут нужно пояснить: с прототипами всё ясно, но какие блоки ты имешь ввиду: статичные или вызываемые?

Отвечу пока кратко тут: прототипы и вызываемые блоки - это методы шаблона, только прототипы приватные, а блоки - публичные, также у них есть некоторые принципиально архитектурные отличия: прототип обрабатывается на этапе трансляции, блок в рантайме, следовательно: прототип увеличивает время трансляции и размер конечного файла, но выполняется супер быстро (+ оптимизация хвостовой рекурсии), но менее гибкий чем блок, а блок быстрее транслируется и занимает меньше места в конечном файле и более гибкий, но работает медленне и нет оптимизации рекурсии, главное, что нужно знать, что их можно использовать друг с другом, т.е. блок вкладывать в протип и наоборот и получать достоинства обеих реализаций.

Цитата:
Как/можно_ли объявить независимый прототип/блок, который можно использовать в любом шаблоне?
Формально такое сделать нельзя, если ты хочешь заюзать блок или прототип шаблона А в шаблоне Б, то нужно шаблон Б отнаследовать от А и все его методы (а прототипы и блоки фактически таковыми являются) отнаследуются с ним, но то, что хочешь сделать ты делается очень просто: просто общий функционал, который нужен во всех независимых шаблонах выносится в отдельные шаблоны и всё:

/// Независимый блок - это шаблон
{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, приступлю скорее всего с пятницы, т.к. сейчас завал по другим делам.
__________________
kobezzza
code monkey

Последний раз редактировалось kobezzza, 10.11.2014 в 22:27.
Ответить с цитированием
  #339 (permalink)  
Старый 10.11.2014, 22:06
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

В SS 6.4 появятся анонимные самовызываемые прототипы
https://github.com/kobezzza/Snakeskin/issues/13
__________________
kobezzza
code monkey
Ответить с цитированием
  #340 (permalink)  
Старый 10.11.2014, 22:59
Аватар для Safort
Профессор
Отправить личное сообщение для Safort Посмотреть профиль Найти все сообщения от Safort
 
Регистрация: 23.12.2013
Сообщений: 1,856

kobezzza,
Цитата:
https://github.com/kobezzza/Snakeski...B5%D1%80%D0%B5
Не-не, это я знаю. Я говорю про подключение шаблона из отдельного файла. Например так:
<script type="text/x-snakeskin-template" id="templates" src="tmp.ss"></script>

Цитата:
Конечно, ты же можешь вызывать любую функцию в шаблоне, а шаблон - это функция, есть даже сахарок для этой задачи: https://github.com/kobezzza/Snakeskin/wiki/call
<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>


Чот так не получается(
Цитата:
ReferenceError: blockName is not defined
Использую v6.3.0.


Спасибо за пояснение по другим моментам)
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
express-snakeskin - view через snakeskin для express melky Ваши сайты и скрипты 5 10.06.2014 11:35