Шаблонизатор VMX::Template/Идеи

< Шаблонизатор VMX::Template
  • HTML-режим, в котором по умолчанию экранируется всё, а чтобы не экранировать или экранировать иначе, нужно специально навесить сверху нужное преобразование, что-то типа {raw(value)} или {js(value)}. Хотя возможны проблемы с, скажем, JS внутри значения параметров типа onclick.
  • НЕвключение результата выражения, кроме INCLUDE, внутри <!-- директивы -->
  • Чуть более хитрую обработку пробелов ([%+ и [%- как в TT, режим для обрезания пробелов в начале строки).
  • Возможно, возродить авто-переводы?
  • Если в коде шаблона очень много инструкций — предупреждение «а не пора бы вам это перенести в код».
  • Наследование шаблонов (только сначала определиться, что это вообще такое)

Ни в коем случае:

  • Не добавлять фильтры :) это те же функции, только зачем-то в другом синтаксисе, некомбинируемом с другими вещами, и менее удобном.
  • Не делать идентичным синтаксис вызова метода объекта и получения элемента хеша (как в TT и ещё много где).

Пока непонятно, нужно ли и в каком виде:

  1. Поддержка проверки формата входных данных?
  2. «Классо-образный» синтаксис вызова функций из шаблонов?

Do you want to try some new features? By joining the beta, you will get access to experimental features, at the risk of encountering bugs and issues.

Ок Нет, спасибо

НЕ НУЖНО: декларативные шаблоны

Концептуальная идея: «декларативные» шаблоны и «функциональная» их обработка, в противовес «процедурной».

То есть, сначала разбиение шаблона на части (статические и вычисляемые), потом в негарантированном порядке замена вычисляемых элементов. За этим стоит идея — если мы будем так обрабатывать запросы в код, это даст возможность коду узнавать, какие же реально шаблону нужны данные, и вытаскивать из базы ровно их.

То есть, как бы шаблоны, которые можно выполнять с любого места в любой момент. То есть либо убрать инструкцию SET, либо превратить её в по сути DEFINE :)

И сразу концепция, которая бы дала возможность коду «узнавать»: «генераторы». Генератор — это некая функция, которая может дать много ответов сразу, причём быстрее, чем если каждый из них давать по одному. Но конкретный набор нужных данных неизвестен, генерировать и выводить в шаблон всё сразу не хочется, а хочется заюзать ленивость по полной. Шаблонизатор мог бы пройтись по всему коду шаблона, собрать встреченные вызовы генераторов, смело сгруппировать их и обработать пачками.

Но до этого вряд ли дело дойдёт.

Концепт номер два: HTML-компоненты

Мысль: классический подход к шаблонизации не совсем удобен для всё чаще и чаще необходимых динамических интерфейсов, которые с одной стороны должны выводиться через HTML, а с другой — уметь меняться через JS. При обычном подходе логику зачастую приходится дублировать, а иногда и вставлять довольно некрасивые подпорки.

Соответственно, идея: возможность компиляции частей шаблона («компонентов») как в HTML, так и в JS, генерирующий HTML. Круче всего, если бы оно умело само:

  • Создавать экземпляр JS-объекта, инкапсулирующего данный «компонент»
  • Автоматически цеплять этот объект к уже выведенному HTML-коду
  • Автоматически привязывать события к конкретным элементам внутри «компонента»
  • Обновлять DOM дерево не целиком (innerHTML), а по частям, конкретные элементы
  • Автоматически обновлять представление компонента при изменении полей JS-объекта
    Это возможно, так как шаблонизатор в курсе (большинства) зависимостей частей представления от конкретных элементов данных
  • Уметь «переключать» представление на новый объект, также меняя только его части