Шаблонирование языка как для клиентской, так и для серверной рендеринга
Я изучаю шаблоны JavaScript как способ визуализации наших представлений. Цель состоит в том, чтобы иметь возможность отображать на стороне клиента для пользователей, у которых есть JavaScript, чтобы отображать те же серверы/серверы данных для тех пользователей (и сканеров), которые этого не делают.
Требования
- Отказ от клиентской стороны.
- Отправка на стороне сервера (поддержка JVM с хорошим доступом).
- Разумная поддержка циклов, условных выражений, обработки текста, частичных, макросов и расширений/плагинов.
- Достаточно большое/активное сообщество пользователей.
Неудовлетворительные решения, найденные до сих пор
- Mustache: поддерживает рендеринг на стороне сервера и клиента, большое/активное сообщество, но шаблоны без "логики" выглядят очень ограничительными и болезненный.
- Node.js plus underscore: JS-шаблоны, такие как подчеркивание, обеспечивают всю гибкость шаблона, в которой я нуждаюсь, но рендеринг их на стороне сервера с использованием Node.js ОЧЕНЬ хрупкий. Node.js является новым и довольно неустойчивым, и его управление пакетами (экспорт...) требует большого количества хаков для правильной работы.
- Google Closure Templates: они скомпилируются с JS и Java и имеют множество функций, которые я хочу. К сожалению, просматривая группы Google, похоже, что отсутствуют многие основные функции (например, возможность цикл над ассоциативными массивами) и документация для создания ваших собственных плагинов очень скудна и болезненна. Более того, я не могу сказать, кто в онлайновом сообществе использует его, Google не принимает вклады от открытого источника для него, и у них нет полосы пропускания для выпуска новых функций.
- isotope: писать шаблоны в JS и использовать Johnson, оболочку Ruby для среды выполнения Mozilla SpiderMonkey JS, чтобы отобразить эти серверные серверные шаблоны. Кажется многообещающим, но проект не совершил более 6 месяцев.
- Liquid с Liquid.js: Жидкий язык шаблонов выглядит превосходно, но проект liquid.js кажется непроверенным (без тестирования в IE!), Не имеет документации, неясно, использует ли кто-нибудь его, и он не обновлялся через некоторое время.
Ответы
Ответ 1
Мы закончили тем, что выбрали dust.js. Проверьте Выход из JSP в пыли и Клиентский шаблонный сброс для получения дополнительной информации.
Ответ 2
Используйте EJS. Он в значительной степени получил все функции, которые вы задаете.
Он может использоваться с express.js из коробки, и он отлично работает на клиенте.
В качестве бонуса я бы использовал backbone.js для выполнения MVC на клиенте и сервере.
Конечно, это зависит от node.js. Я чувствую, что использование экспресс, теперь и позвоночника позволяет вам много стабильного управления с помощью node.js. Не говоря уже о том, что SSJS просто потрясающе, и повторное использование кода фантастично.
Ответ 3
Я бы выбрал XSLT (http://www.w3schools.com/xsl/xsl_client.asp)