Javascript.RU

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

Цитата:
И все же, конкретно, можно основные преимущества перед Jade озвучить (пытался искать по Jade в топике - не нашел)?
Если коротко - всем. SS содержит разительно более мощные средства для повторного использования кода, средства локализации, универсальные средства интеграции с другими шаблонными движками (например для генерации шаблонов для Angular или React).

Jade - это LESS, т.е. примитивная шаблонка
SS - это Stylus, т.е. полноценный язык для генерации шаблонов

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

Цитата:
Особо интересует - решена ли эта проблема? Шаблон Jade как источник структурированных данных
Это не проблема для SS.

contents.ss
- namespace [%fileName%]
- include 'posts/*'

- template main()
  - forEach posts => post
    /// A тут уже делаем всё, что нам нужно
__________________
kobezzza
code monkey

Последний раз редактировалось kobezzza, 10.02.2016 в 19:25.
Ответить с цитированием
  #642 (permalink)  
Старый 10.02.2016, 19:25
Аспирант
Отправить личное сообщение для Max Power Посмотреть профиль Найти все сообщения от Max Power
 
Регистрация: 15.12.2015
Сообщений: 83

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

> вдохновился от Django Templates для Python

У меня есть четкое мнение (это всего лишь одно из всех мнений), что Django Templates - это полная хрень.

С одной стороны, он делает из пользователя идиота. Не позволяет даже объявить переменную в шаблоне например, в общем там куча ограничений. Типа это философия такая - типа верстала не должен иметь возможности накосячить. Типа верстала не сильно шарит в шаблонном движке. Но эта философия уже давно протухла и воняет. Современный верстала должен не просто шарить в шаблонном движке, а обязан быть гуру шаблонного движка, иначе - *вон из професси*.

При всем при этом если нужен шаг в сторону - лезь либо в templatetags, либо во view. А верстала туда лазить не должен!

Но самое мать его веселое - это доступ к ORM.

{% for post in posts %}
     <h1>{{ post.name </h1>
     <p>{{ post.date }}</p>
{% endfor %}


пока все хорошо. А теперь нужно добавить user.reg_date

{% for post in posts %}
     <h1>{{ post.name </h1>
     <p>{{ post.date }}</p>
     <span>{{ post.user.reg_date }}</span>
{% endfor %}


Опа, и вот у нас уже 50 лишних запросов к базе. Это сделал верстала. (И это вообще лайтовый пример.)

А должно быть вот как:
(Верстала): программер, мне в постах еще юзеры теперь нужны
(Программер): понял, добавлю (и уже там select_related и все дела)

Конечно проблема с доступом к ORM - это скорее проблема уровнем повыше, чем особенность шаблонодвижка, но наглядно демонстрирует всю ущербность подхода.

Сейчас Django нативно поддерживает Jinja2, и оно лучше. Jade было бы еще лучше (к сожалению с сабжем пока не знаком), но увы.

...Это все просто мысли.
2all: Как, согласны?
Ответить с цитированием
  #643 (permalink)  
Старый 10.02.2016, 19:28
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Цитата:
У меня есть четкое мнение (это всего лишь одно из всех мнений), что Django Templates - это полная хрень.
То, что я вдохновлялся больше 3-х лет назад чем то, не значит, что оно сейчас так и т.д. При разработке SS учитывался 10+ летний опыт разработки с огромном количеством шаблонных движков.
__________________
kobezzza
code monkey
Ответить с цитированием
  #644 (permalink)  
Старый 10.02.2016, 19:36
Аспирант
Отправить личное сообщение для Max Power Посмотреть профиль Найти все сообщения от Max Power
 
Регистрация: 15.12.2015
Сообщений: 83

> Если коротко - всем
Браво *Скромность украшает мужчину, но настоящий мужчина не нуждается в приукрашивании!*

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

Интересно, буду ждать.

> contents.ss

А вот это уже интересно. Реально куль.

Но проблема в другом - как данные ИЗ_ШАБЛОНА вытащить В_УПРАВЛЯЮЩИЙ_СКРИПТ?

Так как в примере - проблема сильно ближе к решению. А можно на выходе JSON получить? SS - это вообще чисто html-движок (как Jade), или движок общего назначения (как Django Templates)?
Ответить с цитированием
  #645 (permalink)  
Старый 10.02.2016, 19:39
Аспирант
Отправить личное сообщение для Max Power Посмотреть профиль Найти все сообщения от Max Power
 
Регистрация: 15.12.2015
Сообщений: 83

> То, что я вдохновлялся больше 3-х лет назад чем то, не значит, что оно сейчас так и т.д.

ну я это не с целью наезда, а скорее обсудить проблему. Типа

> потому что коль уж здесь любители шаблонов собрались...
Ответить с цитированием
  #646 (permalink)  
Старый 10.02.2016, 19:48
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Цитата:
Браво *Скромность украшает мужчину, но настоящий мужчина не нуждается в приукрашивании!*
Именно так Просто сейчас я работаю над документацией к новой 7-й версии и на это реально уходит очень много сил. Как закончу - то там всё будет.

Цитата:
Но проблема в другом - как данные ИЗ_ШАБЛОНА вытащить В_УПРАВЛЯЮЩИЙ_СКРИПТ?
В SS нет такой проблемы, потому что здесь иная философия. В Jade шаблоном является сам файл, а в SS для декларации шаблонов используется специальная директива template (по духу близкая к class в JS), т.е. в одном файле может быть много шаблонов, у шаблонов могут быть методы, шаблоны могут наследоваться от других шаблонов и т.д. В этом главное отличии SS от большинства других шаблонов, SS выступает в роли транслируемого языка в JS, а не шаблонного движка.

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

posts/
posts/foo.ss

- namespace posts[%fileName%] /// тоже самое, что и написать явно posts.foo

/// Главный шаблон назовём main, он содержит основной пост
- template main()
  < .hello
    Hello world!

/// А это шаблон с превью статьи
- template preview()
  Hello!


Теперь создадим файл с содержанием, который будет выводить тексты превью

contents.ss
- namespace contents
- include 'posts/*' /// Подключаем по маске все файлы из папки posts

- template main()
  /// Т.к. все посты у нас лежат в неймспейсе posts, то просто делаем обход этого объекта 
  - forEach posts => post
    += post.preview() /// Вызываем шаблон превею и выводим его текст


Цитата:
А можно на выходе JSON получить?
Конечно.

Цитата:
или движок общего назначения
Генерить можно любой текст, но для XML есть специальные директивы и фичи. Например я также использую SS для генерации MD файлов.


- namespace myMd

/// Здесь будем использовать вариант синтаксиса без управляющих пробелов, для более удобной генерации
/// И также включим режим "терпимости к пробелам", чтобы сохранить структуру пробелов, т.к. мы генерируем md
{template index(data) @= tolerateWhitespaces true}
# Hello world

{forEach data => el}
  * {el}
{/}

{/template}
__________________
kobezzza
code monkey

Последний раз редактировалось kobezzza, 10.02.2016 в 19:56.
Ответить с цитированием
  #647 (permalink)  
Старый 10.02.2016, 19:57
Аспирант
Отправить личное сообщение для Max Power Посмотреть профиль Найти все сообщения от Max Power
 
Регистрация: 15.12.2015
Сообщений: 83

> В SS нет такой проблемы, потому что здесь иная философия.

у меня конкретный юзкейс

> += post.preview() /// Вызываем шаблон превею и выводим его текст

Мне оно так не надо, мне надо конкретно -
1) галпом разобрать шаблоны постов, получить структуриированные данные из них
2) засунуть все как мне надо в json, сжать его и положить куда надо в папке билда

Между п. 1 и 2 должен стоять контроллер, которому вообще по барабану, какой там шаблонодвижок. Он должен получить данные из п. 1 и с ними уже делать что угодно.
Ответить с цитированием
  #648 (permalink)  
Старый 10.02.2016, 20:02
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Цитата:
засунуть все как мне надо в json, сжать его и положить куда надо в папке билда
- namespace contents
- include 'posts/*'

- template main()
  - var contents = []

  - forEach posts => post
    ? contents.push({preview: post.preview(), content: post.main()})

  /// Т.к. у нас результатом шаблона будет JSON, то убираем html экранирование
  {contents|json|!html}
__________________
kobezzza
code monkey
Ответить с цитированием
  #649 (permalink)  
Старый 10.02.2016, 20:02
Аспирант
Отправить личное сообщение для Max Power Посмотреть профиль Найти все сообщения от Max Power
 
Регистрация: 15.12.2015
Сообщений: 83

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

А вот это богато, базара нет.

То есть мы получаем дополнительную степень свободы, потому что мы больше не привязаны к семантике файловой системы, и можем строить собственную семантику отношений шаблонов, при этом используя ФС как нам удобно, так чтоли?
Ответить с цитированием
  #650 (permalink)  
Старый 10.02.2016, 20:06
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Цитата:
То есть мы получаем дополнительную степень свободы, потому что мы больше не привязаны к семантике файловой системы, и можем строить собственную семантику отношений шаблонов, при этом используя ФС как нам удобно, так чтоли?
Ну и это тоже конечно. А вообще лучше всего к СС относится через призму JS.

var foo = 1;

function bar(a) {
  return a + foo;
}


- var foo = 1

- template bar(a)
  {a + foo}


Кстати результатом работы шаблонов SS может быть не только строка, а что угодно, например можно сказать СС собрать DocumentFragment из шаблона.

/// Вернёт <div class="hello"></div>
- template foo()
  < .hello

/// Вернёт DocumentFragment
- template bar() @= renderMode 'dom'
  < .hello
__________________
kobezzza
code monkey
Ответить с цитированием
Ответ



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

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


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