07.02.2015, 16:28
|
|
Быдлокодер;)
|
|
Регистрация: 19.11.2010
Сообщений: 4,338
|
|
Сообщение от melky
|
угумс. только до меня не доходит, как тогда передавать данные
|
Поиск по DOM и установка вручную, можно написать функцию helper
|
|
08.02.2015, 00:48
|
|
猫
|
|
Регистрация: 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.
|
|
08.02.2015, 10:42
|
|
Быдлокодер;)
|
|
Регистрация: 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, 08.02.2015 в 12:09.
|
|
08.02.2015, 11:30
|
|
猫
|
|
Регистрация: 07.06.2007
Сообщений: 7,504
|
|
Сообщение от kobezzza
|
стараюсь отдавать предпочтение наследованию, т.к. в таком случае архитектура более управляемая и ясная, а композицию могу использовать, где она явно напрашивается.
|
Предпочитаю наследование+композиция. Получается очень гибко и расширяемо. Если сайт маленький, то можно просто наследование, если сайт предполагается большой, то тогда наследование+композиция.
__________________
Последний раз редактировалось Gozar, Сегодня в 24:14.
|
|
08.02.2015, 12:41
|
sinistral
|
|
Регистрация: 28.03.2011
Сообщений: 5,418
|
|
Сообщение от Gozar
|
Предпочитаю наследование+композиция. Получается очень гибко и расширяемо. Если сайт маленький, то можно просто наследование, если сайт предполагается большой, то тогда наследование+композиция.
|
самые модные слова 2015: композиция, категории, чистые функции, иммутабельность, функторы, монады, FUCK WHAT ARE GOING HERE
|
|
11.02.2015, 00:12
|
|
猫
|
|
Регистрация: 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.
|
|
11.02.2015, 08:46
|
|
Быдлокодер;)
|
|
Регистрация: 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, 11.02.2015 в 09:20.
|
|
11.02.2015, 11:42
|
|
猫
|
|
Регистрация: 07.06.2007
Сообщений: 7,504
|
|
Сообщение от kobezzza
|
на меня тут гора дел навалилась, поэтому не смог сделать релиз как обещал Буду стараться к концу этой недели сделать.
|
Ну главное стабильность. Я тут попробовал объявить 2 прототипа, а затем вызвать их из унаследовавшего шаблона, не вышло, они даже не скомпилились в родительском. Потихоньку играюсь, если выявлю, что это странное поведение, напишу в и issue.
__________________
Последний раз редактировалось Gozar, Сегодня в 24:14.
|
|
11.02.2015, 21:57
|
|
Быдлокодер;)
|
|
Регистрация: 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, 11.02.2015 в 22:02.
|
|
11.02.2015, 23:04
|
|
猫
|
|
Регистрация: 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.
|
|
|
|