Декларативный фреймворк Evado обеспечивает быстрое создание веб-приложения с универсальным пользовательским интерфейсом. Это гарантирует надежную и удобную работу на всех этапах функционирования приложения - разработка, эксплуатация, администрирование.
Но иногда требуется модифицировать отображение/поведение некоторых элементов. И хотя фреймворк имеет модуль AJAX API позволяющий создавать любые интерфейсы, в данном ситуации, для ограниченных изменений, он избыточен. Гораздо проще воспользоваться подменой шаблонов представления.
Шаблоны представления
В модуле «Офис» НТМL-представления объектов подготавливаются на стороне сервера. Для этого используется шаблонизатор EJS совместно с модулем areto-ejs, который позволяет использовать структурную компоновку (layouts) и информационные блоки (blocks). Файлы EJS расположены в подкаталоге view/template внутри модулей.
Стандартное приложение Evado состоит из нескольких модулей. В модуле «Студия» создаются метаданные приложения. В модуле «Офис» создаются объекты на основе метаданных. В модуле «Администрирование» настраивается приложение.
При старте приложения все шаблоны образуют единую иерархию. В самом низу находятся шаблоны из node_modules/evado. Их перекрывают шаблоны из папки приложения. Затем следуют шаблоны из модулей, например node_modules/evado-module-office. И, наконец, шаблоны из переопределенных модулей в приложении. Таким образом, если, например, используется шаблон с относительным путем attr/string.ejs, то поиск его местоположения будет происходить по следующим маршрутам:
- app/module/office/view/template/attr/string.ejs
- app/node_modules/evado-module-office/view/template/attr/string.ejs
- app/view/template/attr/string.ejs
- app/node_modules/evado/view/template/attr/string.ejs
Первый найденный шаблон и будет использоваться для рендера представления.
Уровень метаданных
Подмена шаблонов может быть ограничена определенными метаданными. Например, можно заменить шаблон атрибута в конкретном классе. Для этого шаблон размещается по следующему пути:
- app/module/office/view/template/_attr/[имя класса]/[имя атрибута].ejs
Или для представления класса:
- app/module/office/view/template/_attr/[имя класса]/[имя представления]/[имя атрибута].ejs
Кроме того, для класса (или представления класса) можно переопределить любой общий шаблон. Тем самым, он будет использоваться только при отображении этого класса.
- app/module/office/view/template/_class/[имя класса]/[относительный путь до шаблона]/[название шаблона].ejs
- app/module/office/view/template/_view/[имя класса]/[имя представления]/[относительный путь до шаблона]/[название шаблона].ejs
Например, если создать шаблон app/module/office/view/template/_class/[myClass/_meta/attr/edit/date.ejs, то в классе myClass все атрибуты с представлением даты будут использовать данный шаблон. В других классах атрибуты даты будут использовать стандартный шаблон app/node_modules/evado-module-office/view/template/_meta/attr/edit/date.ejs.
Заключение
Наглядный пример использования перегрузки шаблонов представления можно найти в демо-приложении фреймворка Evado.