Многие шаблоны для Javascript придерживаются философского мнения о том, что лучше обеспечить строгое разделение между логикой и презентацией, что означает, что сложность кода/логики, разрешенная в шаблоне, преднамеренно ограничена. Для краткого обзора этой темы см. http://blog.startifact.com/posts/older/the-new-hot-thing-in-web-development-client-side-templating-languages.html (речь идет о шаблонах на стороне клиента, но поскольку это Javascript, многие из тех же языков шаблонов являются популярными в node.js/Express). Эта идея логичных шаблонов существует и в мире PHP, но это не так часто.
Подробнее об этом читайте в этой статье: http://www.cs.usfca.edu/~parrt/papers/mvc.templates.pdf. (Автор также является автором популярного механизма шаблонов для Java под названием StringTemplate.) Автор делает много хороших моментов, и в целом я согласен с идеей логичных шаблонов, но бывают случаи, когда это может быть неудобно, и я найти больше на заборе об этом ... см. this link для некоторых дополнительных соображений. Очевидно, есть и те, кто хочет иметь возможность чего-либо из шаблона (как вы можете в PHP) и полагать, что это прекрасно, чтобы полагаться на самоограничение программиста, чтобы не вводить слишком много кода в представление, где находится шаблон двигатели, такие как EJS.
Сказав все это, важно отметить, что то, что вы хотите достичь, возможно в Handlebars (что является одним из «безжизненных» языков) и, вероятно, многие из других, , Чтобы сделать это в Handlebars, вам нужно создать пользовательский помощник. Это может быть то, что вы ищете: использование
https://www.npmjs.org/package/handlebars-helper-repeat
Пример:
{{#repeat 10}}
{{> button }}
{{/repeat}}
Вы также можете продлить его, чтобы иметь возможность поддерживать аргументы, чтобы иметь возможность контролировать начальное число или приращение , хотя это, вероятно, будет входить в логику, которая может быть лучше сделана в JS-коде (в соответствии с философией Handlebars) при подготовке данных для шаблона.
Что касается макетов, то самое близкое в Handlebars (которое является механизмом шаблона, с которым я больше всего знаком) является частичным. Эта ссылка дает хорошее представление об этом: http://blog.teamtreehouse.com/handlebars-js-part-2-partials-and-helpers.
Лично я большой поклонник языка шаблонов в потрясающей структуре (построен на Express) под названием Derby.Его язык шаблонов похож на Handlebars, но поставляется с несколькими удобными расширениями - этого достаточно, чтобы сделать его более удобным для использования, не допуская слишком много логики, чтобы заполнить шаблон. К сожалению, я не думаю, что есть отдельная версия (т. Е. Вы должны использовать полную структуру Derby), но вы можете создавать собственные помощники в Handlebars для достижения аналогичного эффекта.
Вы пробовали ** EJS **? –
@ArunGhosh nop, но кажется [ему нужен еще один плагин для поддержки макета] (https://github.com/Soarez/express-ejs-layouts), правильно? – Alvaro
Посмотрите http://www.embeddedjs.com/ –