Как стать автором
Обновить

Создание уникальных тем для приложений ExtJS 6

Время на прочтение3 мин
Количество просмотров12K
Добрый день, в данной статье я расскажу про основные нюансы создания тем для ваших приложений на ExtJS 6. Данная статья предполагает, что вы уже имеете опыт работы с ExtJS. В качестве примера будет использоваться modern toolkit, для classic toolkit особых различий нет. В данной статье рассмотрены следующие вопросы:

  • 1. Наследование и создание темы
  • 2. Подходы к созданию дизайна
  • 3. Применение UI mixins

Добро пожаловать под кат.

Введение: Создание тестового приложения


Для того чтобы сгенерировать наше тестовое приложение c использованием только modern toolkit, воспользуемся командой:

sencha -sdk "\path\to\framework" generate app -modern TestApp "\path\to\application"


1. Наследование и создание темы


При создании своей темы ExtJS позволяет наследоваться от любой существующей темы. Необходимо сразу определиться, что вам необходимо реализовывать какие то вещи самим с нуля, или же взять часть оформления от другой темы. На текущий момент в последней доступной версии ExtJS 6.0.1 (в modern toolkit) существуют 8 различных тем. Иерархия между ними выглядит следующим образом.

Иерархия тем в ExtJS 6.0.1 (modern toolkit)

Для classic toolkit существуют 8 основых тем (также существуют модифицированные под touch события, например theme-neptune-touch, на диаграмме они не указаны).

Иерархия тем в ExtJS 6.0.1 (modern toolkit)

Для того, чтобы посмотреть на сколько вам подходит та или иная тема, её можно задать в app.json и посмотреть, используя sencha app watch. Так же следует помнить, что в некоторых темах могут быть не реализованы стили для отдельных контролов (например, в theme-mountainview не реализован tooglefield), так что смотрите и оценивайте родителя внимательно.

Для создания вашей темы, где родителем будет выступать тема theme-triton, воспользуйтесь командой:

sencha generate theme --extend theme-triton my-test-theme

После этого ваша тема my-test-theme будет располагаться в папке “packages/local/”. Рассмотрим структуру папок темы:

package.json — Основной файл описывающий тему, там указываются все свойства темы: родитель, имя, версия и её зависимости.
sass — В этой папке содержаться только sass файлы, внутри неё вы увидете следующие папки: var для создания переменных, src для создания миксинов, etc для создания пользовательских миксинов и дополнительной функциональности.
resources — В этой папке должны храниться только статичные ресурсы, например картинки и css.
overrides — В этой папке хранятся js файлы, для создания дополнительной функциональности к уже существующим контролам.

2. Подходы к созданию дизайна


После создания вашей темы можно выбрать, как именно вы будете реализовывать дизайн. Есть два пути создания дизайна: правильный и против лома нет приёма и не очень:

  • Style overrides — предполагает то, что вы будете переопределять стили ExtJS в ваших css файлах (используя !important). Данный метод может использоваться, если вы не хотите связываться с sass, и проект не очень большой. Отрицательной стороной данного метода является создание избыточного css кода.
  • UI mixins — true way, позволяет реализовывать произвольный стиль для каждого контрола, без последствий для него. Штатный механизм ExtJS требует понимания sass.


3. Применение UI mixins


После создания темы рекомендуется задать глобальные переменные для sass, это сильно облегчит вам жизнь в дальнейшем. Со списком переменных можно ознакомиться тут. Для задания глобальных переменных необходимо создать файл “packages/local/my-test-theme/sass/var/Component.scss”, а там указать, например:

$base-color : #317040;

После этого можно посмотреть результат (до и после).
imageimage

Настоятельно рекомендуется задать $base-color, и работать только с ним, варьировать цвета с помощью миксинов (функций sass). Практически каждый контрол в ExtJS имеет свои CSS mixins. Рассмотрим применение миксинов на примере Button. Для этого создадим файл “my-test-theme/sass/src/Button.scss” со следующим содержанием:

@include button-ui(
  $ui: 'lighten',
  $ui-button-color: lighten($base-color,20) // светлее на 20% основного цвета
);

@include button-ui(
  $ui: 'darken',
  $ui-button-color: darken($base-color,20) // темнее на 20% основного цвета
);

Теперь мы можем добавить кнопки c нужным нам UI миксином.

        {
            xtype: 'button',
            ui: 'lighten',
            text: 'lighten button'
        },{
            xtype: 'button',
            ui: 'darken',
            text: 'darken button'
        }, {
            xtype: 'button',
            text: 'original button'
        }

Результат будет следующим:

image

Таким образом с помощью UI миксинов можно безнаказанно декорировать любой контрол.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Какая статья по ExtJS будет следующей?
48.28% ExtJS 6: Реализация умного store с кэшированием28
51.72% ExtJS 6: Реализация клиент-серверного приложения с помощью Ext.Direct30
Проголосовали 58 пользователей. Воздержались 15 пользователей.
Теги:
Хабы:
+7
Комментарии4

Публикации

Истории

Ближайшие события

Weekend Offer в AliExpress
Дата20 – 21 апреля
Время10:00 – 20:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн