Тема: Snakeskin
Показать сообщение отдельно
  #457 (permalink)  
Старый 06.02.2015, 13:59
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Чёто тебя в странную степь понесло, ну да ладно.

1) Во первых (на всякий случай) в файле можно объявлять сколько угодно шаблонов, а не только один (этим SS принципиально отличается от того же Jade)

{template foo()}
   ...
{/}

{template bar()}
   ...
{/}

/// Можем использовать неймспейсы
{template some.foo.bar()}
   ...
{/}


2) Во вторых (тоже на всякий случай) в файл шаблона можно подключать другие файлы

{include 'myFile.ss'}
{include 'tpls/*.ss'}

/// Можно даже так
{eval}
    {forEach ['foo.ss', 'bar.ss'] => url}
        {include url}
    {/}
{/}

{template foo()}
   ...
{/}


А в JS вызывать один главный файл.

3) Как ты хочешь тоже можно, но я опишу самый лучший кейз - это использование наследования. Чтобы понять наследование в SS, то нужно просто привыкнуть к той мысле, что шаблон - это класс (в вики этому посвящён целый раздел).

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

base.ss

{template base(@params)}
    {doctype}
    <html>
        <head>
            {block head}
                /// Подключим базовые стили и скрипты
                {block script}
                    {script js src = base.js}{/}
                {/}

                {block style}
                    {link css}base.css{/}
                {/}
            {/block}
        </head>
  
        <body>
            {block body}
            {/block}
        </body>
    </html>
{/template}


Далее создают, например, profile.ss

{include 'base.ss'}

/// Наследуемся от базового шаблона и доопределяем / переопределяем структуру (это блоки, прототипы. константы и т.д.)
{template profile(params) extends base}
    {block script}
        {super}
        {script js src = profile.js}{/}
    {/}

    {block style}
        {super}
        {link css}profile.css{/}
    {/}

    {block body}
       <div class="foo">
           ...
       </div>
    {/}
{/template}


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

Теперь про термины в наследовании:

1) Блоки (те, что я использовал в примере) - это как свойства класса, которые можно переопределить или доопределить в дочернем классе.
2) Константы и входные параметры - это свойства, которые можно также изменять при наследовании;
3) Прототипы - это протектед методы класса;
4) Вызываемые блоки - это публичные методы класса.

PS: В примере я использовал параметр с @ - это сахар для with биндинга,

https://github.com/kobezzza/Snakeskin/wiki/with
__________________
kobezzza
code monkey

Последний раз редактировалось kobezzza, 06.02.2015 в 14:02.
Ответить с цитированием