Найти тему
Logonok

Точечная кастомизация представления пользовательского интерфейса

Оглавление

Декларативный фреймворк Evado обеспечивает быстрое создание веб-приложения с универсальным пользовательским интерфейсом. Это гарантирует надежную и удобную работу на всех этапах функционирования приложения - разработка, эксплуатация, администрирование.

Но иногда требуется модифицировать отображение/поведение некоторых элементов. И хотя фреймворк имеет модуль AJAX API позволяющий создавать любые интерфейсы, в данном ситуации, для ограниченных изменений, он избыточен. Гораздо проще воспользоваться подменой шаблонов представления.

Шаблоны представления

В модуле «Офис» НТМL-представления объектов подготавливаются на стороне сервера. Для этого используется шаблонизатор EJS совместно с модулем areto-ejs, который позволяет использовать структурную компоновку (layouts) и информационные блоки (blocks). Файлы EJS расположены в подкаталоге view/template внутри модулей.

Стандартное приложение Evado состоит из нескольких модулей. В модуле «Студия» создаются метаданные приложения. В модуле «Офис» создаются объекты на основе метаданных. В модуле «Администрирование» настраивается приложение.

При старте приложения все шаблоны образуют единую иерархию. В самом низу находятся шаблоны из node_modules/evado. Их перекрывают шаблоны из папки приложения. Затем следуют шаблоны из модулей, например node_modules/evado-module-office. И, наконец, шаблоны из переопределенных модулей в приложении. Таким образом, если, например, используется шаблон с относительным путем attr/string.ejs, то поиск его местоположения будет происходить по следующим маршрутам:

  1. app/module/office/view/template/attr/string.ejs
  2. app/node_modules/evado-module-office/view/template/attr/string.ejs
  3. app/view/template/attr/string.ejs
  4. 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.

Декларативный фреймворк Evado - всё вместе для создания веб-приложения
Декларативный фреймворк Evado - всё вместе для создания веб-приложения