Javascript.RU

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

Сообщение от melky Посмотреть сообщение
угумс. только до меня не доходит, как тогда передавать данные
Поиск по DOM и установка вручную, можно написать функцию helper
__________________
kobezzza
code monkey
Ответить с цитированием
  #472 (permalink)  
Старый 08.02.2015, 00:48
Аватар для Gozar
Отправить личное сообщение для Gozar Посмотреть профиль Найти все сообщения от Gozar
 
Регистрация: 07.06.2007
Сообщений: 7,504

kobezzza,
А может шаблон собираться из разных файлов.

html.ss
{template html(@param)}
{/}


header.ss
{template header(@param)}
{/}


main.ss
{include 'html.ss'}
{include 'header.ss'}

{template main(param) extends html}

{block header}
{super}
{/}
{/template}


Или только proto и apply?
__________________
Последний раз редактировалось Gozar, Сегодня в 24:14.
Ответить с цитированием
  #473 (permalink)  
Старый 08.02.2015, 10:42
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Конечно, такой приём по аналогии с классическими языками (от слова класс) называется "композицией". Самый удобный способ сделать это - это использовать директиву call.

{template foo(a, b)}
    {a + b}
{/}

{template bar()}
    {call foo(1, 2)} /// 3
{/}


Цитата:
Или только proto и apply?
proto - apply и block - callBlock ассоциированы с конкретным шаблоном и являются его методами, т.е. они участвуют при наследовании, а в примере выше у нас 2-а независимых шаблона.

Это уже вопросы архитектуры, лично я стараюсь отдавать предпочтение наследованию, т.к. в таком случае архитектура более управляемая и ясная, а композицию могу использовать, где она явно напрашивается.
__________________
kobezzza
code monkey

Последний раз редактировалось kobezzza, 08.02.2015 в 12:09.
Ответить с цитированием
  #474 (permalink)  
Старый 08.02.2015, 11:30
Аватар для Gozar
Отправить личное сообщение для Gozar Посмотреть профиль Найти все сообщения от Gozar
 
Регистрация: 07.06.2007
Сообщений: 7,504

Сообщение от kobezzza
стараюсь отдавать предпочтение наследованию, т.к. в таком случае архитектура более управляемая и ясная, а композицию могу использовать, где она явно напрашивается.
Предпочитаю наследование+композиция. Получается очень гибко и расширяемо. Если сайт маленький, то можно просто наследование, если сайт предполагается большой, то тогда наследование+композиция.
__________________
Последний раз редактировалось Gozar, Сегодня в 24:14.
Ответить с цитированием
  #475 (permalink)  
Старый 08.02.2015, 12:41
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Сообщение от Gozar Посмотреть сообщение
Предпочитаю наследование+композиция. Получается очень гибко и расширяемо. Если сайт маленький, то можно просто наследование, если сайт предполагается большой, то тогда наследование+композиция.
самые модные слова 2015: композиция, категории, чистые функции, иммутабельность, функторы, монады, FUCK WHAT ARE GOING HERE
Ответить с цитированием
  #476 (permalink)  
Старый 11.02.2015, 00:12
Аватар для Gozar
Отправить личное сообщение для Gozar Посмотреть профиль Найти все сообщения от Gozar
 
Регистрация: 07.06.2007
Сообщений: 7,504

kobezzza,
Пару вопросов.

1. proto может быть только один?
2. block или blocks? В чем отличия или это опечатка?
Сообщение от https://github.com/kobezzza/Snakeskin/wiki/block
{blocks hello(@params)}
Сообщение от https://github.com/kobezzza/Snakeskin/wiki/block
{block hello()}
ps:
{@des|br|!html}
Фильтры клева. Немного чудно, что !html отменяет html, который задается неявно, но клева
__________________
Последний раз редактировалось Gozar, Сегодня в 24:14.

Последний раз редактировалось Gozar, 11.02.2015 в 00:36.
Ответить с цитированием
  #477 (permalink)  
Старый 11.02.2015, 08:46
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Цитата:
1. proto может быть только один?
Сколько угодно, но имя должно быть уникально в рамках шаблона, внутрь также можно включать другие прототипы и блоки, есть ещё анонимные прототипы - они нужны когда просто нужно сделать рекурсию (которая кстати, оптимизируется), но не хочется вводить именованный элемент. Размещать прототипы (как и вызываемые блоки) можно как в шаблоне, так и вне до декларации шаблона, к которому они принадлежат, можно выносить в отдельный файл.

{proto foo->some(a, b)}
    {a + b}
{/}

{template foo()}
    {proto bar(a)}
        {a * 2}
    {/}

    {apply some(1, 2)} /// 3
    {apply bar(2)} /// 4
{/}


Цитата:
2. block или blocks? В чем отличия или это опечатка?
Опечатка, есть только block.

Цитата:
Фильтры клева. Немного чудно, что !html отменяет html, который задается неявно, но клева


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

{var a = '  fooo '|trim}

{if ' fooo  '|trim}


и т.д.

Если нужно наложить фильтр на определённую часть выражения, а не на всю, то нужно выделить её скобками.

{var a = (' ffffuuu '|trim) + ' bar  '}


Но фильтр !html можно применять только глобально.

PS: на меня тут гора дел навалилась, поэтому не смог сделать релиз как обещал Буду стараться к концу этой недели сделать.
__________________
kobezzza
code monkey

Последний раз редактировалось kobezzza, 11.02.2015 в 09:20.
Ответить с цитированием
  #478 (permalink)  
Старый 11.02.2015, 11:42
Аватар для Gozar
Отправить личное сообщение для Gozar Посмотреть профиль Найти все сообщения от Gozar
 
Регистрация: 07.06.2007
Сообщений: 7,504

Сообщение от kobezzza
на меня тут гора дел навалилась, поэтому не смог сделать релиз как обещал Буду стараться к концу этой недели сделать.
Ну главное стабильность. Я тут попробовал объявить 2 прототипа, а затем вызвать их из унаследовавшего шаблона, не вышло, они даже не скомпилились в родительском. Потихоньку играюсь, если выявлю, что это странное поведение, напишу в и issue.
__________________
Последний раз редактировалось Gozar, Сегодня в 24:14.
Ответить с цитированием
  #479 (permalink)  
Старый 11.02.2015, 21:57
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Сообщение от Gozar Посмотреть сообщение
Ну главное стабильность. Я тут попробовал объявить 2 прототипа, а затем вызвать их из унаследовавшего шаблона, не вышло, они даже не скомпилились в родительском. Потихоньку играюсь, если выявлю, что это странное поведение, напишу в и issue.
Можешь описать в примере? Просто если это бага, то она носит критический характер, но надеюсь, что это не так. А что говорит отладчик SS?

Вот сделал примерчик, где идёт использование прототипов при наследовании, причём один из прототипов переопределяется.

http://jsfiddle.net/NAPWB/15/

PS: хороший пример возможных вариантов использования можно глянуть в тестах, для прототипов, например,

https://github.com/kobezzza/Snakeski.../test/proto.ss
https://github.com/kobezzza/Snakeski...test/proto2.ss

(шаблоны расположены между ###, а остальное данные для тестового скрипта)
__________________
kobezzza
code monkey

Последний раз редактировалось kobezzza, 11.02.2015 в 22:02.
Ответить с цитированием
  #480 (permalink)  
Старый 11.02.2015, 23:04
Аватар для Gozar
Отправить личное сообщение для Gozar Посмотреть профиль Найти все сообщения от Gozar
 
Регистрация: 07.06.2007
Сообщений: 7,504

Сообщение от kobezzza
Можешь описать в примере?
test_html.ss
{template html(@param)}
    <html>
        <body>
            {block body}
                {proto des(@des)}
                    <div class="des">{@des}</div>
                {/proto}
            {/block}
        </body>
    </html>

{/template}


test.ss
{include 'test_html.ss'}

{template main(param) extends html}

   {block body}

        <div class="wrap">

                {apply des()}

        </div>
    {/}

{/template}


des + <div class="des"></div> нет ни в test_html.ss.js ни в test.ss.js. То есть он не компилится.
__________________
Последний раз редактировалось Gozar, Сегодня в 24:14.

Последний раз редактировалось Gozar, 11.02.2015 в 23:09.
Ответить с цитированием
Ответ



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

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


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