Впечатления об ExtJS

Недавно попытался поучаствовать в проекте, использующем ExtJS.

Именно попытался. И проект использует ExtJS немного не обычным способом. А именно: берутся представления – объекты-классы ExtJS, которые описывают расположение элементов в контейнере, и затем, отбрасывая контроллеры, пишутся классы на typescript, которые и пользуются для отображения этими представлениями. Отмечу, что до того как мы расстались с этим проектом, преимуществ использования typescript, кроме использования интерфейсов, я разглядеть не успел. Наоборот – в паре мест думал как кастовать один тип в другой (но это скорее всего я просто отвык от типизированных языков).

Из-за этого впечатления не полноценные – я столкнулся только с одной частью большой и мощной библиотеки-фреймворка построения GUI и браузерных приложений. Возможно, даже не возможно а точно, использование typescript вместо родного workflow фреймворка только помешало. Далее только мое черезвычайно субъективное мнение.

Пример:

Что хочется:
Вместо нескольких html элементов, хочется генерить компонентом один только div;
компонент создается через контруктор (не initComponent) на основе Ext.container.Container;
нужно вешать на него событие клика;
компонент желательно рисовать в sencha architect (т.е. нельзя полагаться на то, как архитект сгенерит код класса представления).

Проблемы:
при создании компонента нормально генерится html, если он записан в свойство renderTpl;
это свойство архитектом упорно кладется в initComponent, соответственно приходится в архитекте делать оверрайд класса;
на момент создания контструктором DOM элемента еще нет, поэтому событие приходится вешать (спасибо одному человеку – подсказал как это сделать в тайпскрипте, а не js) на пострендер.

Что понравилось

  1. Наличие наследования. При определении файла (define) можно указать класс, от которого будет наследование (extend в конфиге дефайна)
  2. Свой загрузчик. Не нужно писать, например, под requirejs. Свой загрузчик нормально подтягивает вьюхи, если они прописаны в app или в requere секции класса
  3. Возможность описания интерфейса в json формате

Что не понравилось

  1. Внешний вид контролов в дефолтной серой или теме neptune непривычны для веб-интерфейсов. В последнее время популярным стал так называемый “плоский” стиль контролов, который мне нравится, то стандартные темы контролов скорее похожи на интерфейс оффтопика.
  2. Громадное количество генерируемого html – это тихий ужас кастомизации. Я отдаю себе отчет, что войти за месяц в ExtJS не получится, и совершенно точно есть множество решений, заложенных в этом фреймворке. И для того чтобы понять как быстро изменить внешний вид и поведение контролов, нужно хотя бы приблизительно знать жизненный цикл компонента. Тем не менее привычный метод посмотрел как отрисовалось в браузере – понял что нужно менять тут не подходит. Даже простая кнопка генерирует достаточно громоздкий html.
  3. Я в свое время “кодил в дельфях” и немного на “вижуал бесике”, так вот, на основании примерно месяца знакомства с ExtJS – расставить кнопочки по формам, нарисовать поля ввода и т.п. – так как это и задумывалось авторами – работает на ура, если же захочется управлять генерируемым html, т.е. “шаг в сторону” – сразу начинают возникать проблемы.
  4. Своеобразный подход в генерации кода архитектом – править его не дает, а если ручками поправить, то потом все равно затрется.

Итого, выводы: Удовольствия от использования ExtJS не получилось. Так же как клево писалось под связку backbone + bootstrap, так же под ExtJS постоянно преследовало чувство недовольства. Как я понял, можно писать на ExtJS, но для этого нужно изучить его достаточно хорошо, что быстро сделать никак не получится. Так что у меня получилось – не столько кодил, сколько боролся с фреймворком.

При условии глубокого изучения ExtJS вы получаете мощный инструмент, позволяющий довольно быстро получить много вкусняшек вроде деревьев “из коробки” и каркас для построения большого и сложного приложения, при условии использования ExtJS так, как это и задумывается авторами.

Не считаю удачным вообще решение использовать в вебе тот же подход в программировании, который принят для десктопных приложений.
Если нужно быстрое, небольшое и легкое приложение – ExtJS не ваш выбор. В этом случае лучше выбрать какой-нибудь css фреймворк и тот же backbone для структуризации приложения. Не нужно бояться html+js+css – это достаточно мощный набор инструментов и не только для визуализации.

Дополнительно

Из всех ресурсов на русском по ExtJS понравился вот этот http://metanit.com/web/extjs

Tags:

Leave a Reply

Your email address will not be published. Required fields are marked *