Отличный фреймворк для веб-приложений

Заметки Дэва

Ember.js — это JavaScript-фреймворк для разработки онлайн-приложений на стороне клиента, и это амбициозный проект, который в последнее время стал очень сдержанным. Сегодня я хочу объяснить некоторые основные понятия, лежащие в основе Ember.js. Я представлю построение простого приложения.

Отличный фреймворк для веб-приложений

Это программа под названием Dice Roller, которая позволяет "бросать" игральные кости с заданными параметрами и просматривать историю предыдущих "бросков". Его код можно найти на github. Фреймворк Ember.JS включает в себя множество современных концепций и технологий из мира JavaScript. Среди его особенностей мы хотели бы отметить следующие

  • Использование компилятора Babel для обеспечения поддержки ES2016.
  • Поддержка инструментов тестирования TESTEM и QTEST, которые открывают возможности для модульного, завершающего и приемочного тестирования.
  • Поддержка производителя Broccoli.js.
  • Интерактивная перезагрузка сайта для ускорения процесса разработки.
  • Поддержка стандартов руля.
  • Использует модель разработки, при которой сначала создаются URL-адреса. Это обеспечивает полную поддержку глубоких соединений.
  • Поддерживает связь с уровнями данных на основе JSON API, но с создаваемыми API.

Кроме того, стоит отметить, что ember.js — это только front-end фреймворк. Хотя он поддерживает множество способов взаимодействия с различными бэкендами, все, что связано с кодом на стороне сервера, выходит за рамки Ember.

Знакомство с ember-cli

Отличный фреймворк для веб-приложений

Ember-Cli, интерфейс командной строки Ember.js, предоставляет доступ ко многим функциям фреймворка. Ember-Cli поддерживает разработчиков на всех этапах их работы. Он облегчает создание приложений, расширение их функциональности, тестирование и запуск проектов в состоянии разработки.

Почти все, что вы делаете при создании приложения Ember, в той или иной степени связано с Ember-Cli. Поэтому важно изучить этот инструмент. Мы постоянно используем его во время нашей образовательной программы.

Первым шагом будет установка Ember-Cli или, если он уже установлен, проверка актуальности текущей версии. Вы можете установить Ember-CLI из реестра NPM с помощью следующей команды

Чтобы проверить, была ли установка успешной и какая версия Ember-Cli установлена, можно использовать следующий порядок действий

Создание первого приложения на Ember.js

После установки Ember-Cli вы готовы приступить к созданию своего приложения. Это первая ситуация, в которой вы будете использовать Ember-Cli. Создайте структуру вашего приложения, придайте ему форму и обеспечьте функциональную работу. Используйте следующие команды для создания приложения для работы с кубиками.

Выполнение приведенной выше команды создает функциональное приложение для вашего приложения. Она также регулирует систему контроля версий Git. Обратите внимание, что интеграция с Git может быть отключена, а вместо пакетного менеджера NPM можно использовать YARN. Более подробную информацию об этом можно найти в документации Ember.

Теперь давайте посмотрим, чего мы достигли. Как упоминалось выше, запуск приложения Ember для целей разработки осуществляется с помощью Ember-Cli. Вот как это сделать: 1.

Теперь, когда все готово, приложение доступно по адресу http: // localhost: 4200 и выглядит следующим образом

Отличный фреймворк для веб-приложений

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

Главная страница подскажет вам, что делать дальше, поэтому прислушайтесь к этим сообщениям, измените свою главную страницу и посмотрите, что произойдет. Для этого вы можете сделать следующее в файле app/templates/application.hbs: app/templates/application.hbs

Обратите внимание на то, что тег > Это часть того, как работает процесс маршрутизации в Ember. Более подробно об этом рассказано ниже.

После того как вы изменили файл, стоит проверить, что ember-cli отображает в консоли. Это будет выглядеть примерно так

Это означает, что система обнаружила изменения шаблона, перестроила проект и перезапустила его. Это полностью автоматизированный процесс — мы в нем не участвуем.

Теперь давайте посмотрим на браузер. Если у вас установлен и работает LiveReload, вам даже не нужно перезагружать страницу вручную, чтобы увидеть изменения. В противном случае вам придется самостоятельно перезагружать страницу приложения.

Отличный фреймворк для веб-приложений

Мы не говорим, что страница великолепна, но то, что мы сделали, потребовало минимальных усилий.

Также имеется полная подсистема тестирования, доступная для немедленного использования. Для этого необходимо использовать соответствующие инструменты Ember.

Обратите внимание, что большая часть вывода происходит из Phantom.js. Это связано с тем, что интеграционные тесты полностью поддерживаются. Интеграционные тесты по умолчанию запускаются в браузере PhantomJS без графического интерфейса. При необходимости тесты можно запускать в других браузерах. При создании системы непрерывной интеграции (CI) стоит воспользоваться этой возможностью и убедиться, что приложение корректно работает во всех поддерживаемых браузерах.

Структура Ember.js-приложения

Прежде чем приступить к работе над приложением, разберитесь в структуре папок и файлов, на которых основано приложение. Приведенная выше команда ember new создает папки и файлы, необходимые приложению, которых довольно много. Понимание того, как они структурированы, важно для организации эффективной работы в Ember и создания проектов любого размера.

ЧИТАТЬ ЕЩЁ:  Что такое SEO SEA SEM SMM SMO и их отличия

В верхней части структуры приложения вы увидите следующие файлы и папки

  • README.md — стандартный файл readme, описывающий приложение.
  • package.json — конфигурационный файл npm, описывающий приложение. В основном используется для обеспечения правильной установки зависимостей.
  • ember-cli-build.js — Это конфигурационный файл ember-cli, отвечающий за сборку приложения.
  • testem.js — Это конфигурационный файл для подсистемы тестирования. В частности, он позволяет указать браузер, используемый для тестирования приложения в различных средах.
  • app/ — где хранится логика приложения. В этой папке происходит много интересного. Это объясняется ниже.
  • config/ — здесь хранится конфигурация приложения.
  • public/ — здесь хранятся статические ресурсы, включенные в приложение. Примерами могут служить изображения и шрифты.
  • vendor/ — Внешние зависимости, не управляемые системой сборки.
  • tests/ — здесь хранятся тесты.

Структура страницы

Прежде чем продолжить, посмотрите на структуру страницы. В этом случае используйте блок Materalize CSS, чтобы придать конечному пользователю лучший вид и ощущение.

Чтобы добавить поддержку дополнительной функциональности в ваше приложение, вы можете использовать один из следующих подходов

  • Используйте внешнюю службу, например, какой-нибудь CDN, чтобы напрямую подключиться к тому, что вам нужно.
  • Используйте менеджер пакетов, такой как NPM или Bower, для установки необходимых пакетов.
  • Включите ресурсы непосредственно в свое заявление.
  • Используйте соответствующий ADD -ON для Ember.

Теперь вы можете изменить домашнюю страницу, чтобы показать основные стандарты вашего приложения. Это делается путем преобразования файла application/ Templates/Application.hbs в данное представление.

Благодаря этому коду в верхней части страницы окажется навигационная панель, подготовленная средствами Materialize. На странице имеется и контейнер, в котором расположен упомянутый выше тег > .

Теперь, когда вы посмотрите в свой браузер, вы увидите, что страница выглядит следующим образом

Отличный фреймворк для веб-приложений

Пришло время поговорить о теге > . Ember работает на основе маршрутов. Каждый корень считается потомком другого корня. Корень root автоматически управляет и отображает App/Templates/Application.hbs.

Тег > Он определяет, где Ember отображает содержимое, соответствующее следующему корню в иерархии. Поэтому корень первого уровня изображен на этом ярлыке приложения. Например, стандарт.

Создание нового маршрута

Доступ к каждой странице приложения в ember.js организуется через маршрут. Существует прямая зависимость между URL-адресом, который открывает браузер, и содержимым, связанным с путем, отображаемым в приложении.

Самый простой способ ознакомиться с тем, что это значит, — использовать пример. Добавьте новый маршрут в ваше приложение, который позволит пользователям "бросать" кости. Опять же, этот шаг выполняется в ember-cli.

Он был создан путем вызова этой команды.

  • Оператор маршрута — App/ routes/roll.js
  • Стандартом для маршрутов является App/Templates/Roll.hbs.
  • Тестирование маршрута — Test/Unit/root/roll-test.js
  • Обновите конфигурацию маршрутизатора, чтобы предоставить информацию о новом маршруте — App/router.js

Затем зайдите на http: // localhost:4200/roll и посмотрите, что произойдет.

Отличный фреймворк для веб-приложений

Далее нам нужен способ организовать ссылку на эту страницу через интерфейс приложения. Ember упрощает эту задачу с помощью меток Link-to. Помимо прочего, он принимает название маршрута, на который вы отправляете пользователя, и отображает информацию, позволяющую пользователю следовать по этому маршруту.

Включите следующее в файл app/ template/application.hbs.

Это отобразит навигационную строку в верхней части страницы, как показано на рисунке ниже.

Отличный фреймворк для веб-приложений

В правой части панели появится новая ссылка "Бросить кости", которая при нажатии перенесет пользователя на / бросок. Это именно то, чего мы пытаемся достичь.

Разработка модульных компонентов

Попробуйте приложение и попробуйте. Вы заметите проблемы. Главная страница работает нормально, ссылки / роли работают, но подписи полей формы не выровнены должным образом. Это происходит потому, что Materalize необходимо вызвать определенный JS-код для правильной организации данных, но из-за особенности динамической маршрутизации страница не перезагружается. Сейчас мы это исправляем.

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

В настоящее время мы создаем единственный компонент, который имеет форму броска игральной кости. Как обычно в таких случаях, мы вызываем Ember-Cli для создания компонента.

В результате система создает

  • Код, реализующий логику элемента — App/Components/Roll -Dice.js
  • >Стандарт, определяющий внешний вид предмета — App/Templates/Components/Roll -Dice.hbs
  • Тест для проверки правильности работы компонентов Тест/ Интеграция/ Компоненты/ Roll -Dice.js

Поместите следующий код в app/ Templates/roll.hbs.

Те же обозначения в файле стандарта пути были перенесены в стандарт компонента. В этом случае путь стандартного файла намного проще. Этикетка на рулонном кубике определяет положение угля, в котором заканчивается изделие.

Теперь мы знаем, как приложение выглядит в браузере, и никакой разницы нет. Однако структура кодекса изменилась и стала более четкой. Новый компонент, который вы создали, используется для исправления неправильного расположения страницы и добавления некоторой новой функциональности в приложение.

Жизненный цикл компонента

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

ЧИТАТЬ ЕЩЁ:  14 бесплатных jQuery Lightbox-библиотек

Для этого отредактируйте код компонента в App/Components/Roll-Dice.js.

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

Привязка данных

Вы хотите загружать данные в пользовательский интерфейс и выводить их из него с помощью элементов. Сделать это очень просто, но интересно отметить, что в руководстве по Ember нет ничего, связанного с этим. В результате процесс привлечения данных в Ember выглядит сложнее, чем есть на самом деле.

Каждый элемент, который вы редактируете, существует как поле класса компонента. Зная это, вы можете сопоставить поля ввода с элементами и использовать вспомогательные инструменты, которые могут связать эти поля с переменными в элементе. В результате вы можете напрямую взаимодействовать с данными, не думая о том, что они взаимодействуют с DOM.

В данном случае, поскольку имеется три поля, в App/Components/Roll-Dice.js в блоке определения элемента необходимо добавить три строки кода.

Затем настройте стандарт на извлечение этих данных с помощью вспомогательного механизма вместо обычного HTML-сигнала. Для этого необходимо заменить метку следующим кодом

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

  • В виде строки, заключенной в кавычки. Этот подход отображает значение так, как оно отображается в коде.
  • Как строка без кавычек. В этом случае значение берется из соответствующего раздела данных элемента, но элемент, из которого извлекаются данные, не влияет на элемент.
  • Как структура (MUT). Это означает, что соответствующее значение берется из элемента и элемент изменяется при изменении цены в браузере (мутация).

Действия компонента

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

Он просто уведомляет пользователя о введенных в форму данных, но больше ничего не делает на данном этапе (мы сделаем это ниже). Здесь используется OnSubmit, энергия самой формы. Это означает, что действие вызывается, когда пользователь нажимает кнопку или клавишу Enter в одном из полей ввода.

Ниже приведена выдержка из энергетического кода в App/Components/Roll-Dice.hbs.

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

Здесь мы видим, что можем получить доступ к вышеуказанным переменным и использовать их для доступа к полям импорта. Использование DOM здесь не подходит — все, что мы здесь делаем, это просто взаимодействуем с переменными JS.

Теперь остается только связать их воедино. В стандартном файле необходимо указать метке формы вызывать это действие при активации события OnSubmit. Это достигается путем добавления единственной функции к метке формы, которая использует Ember Assistant для подключения формы к энергии. В App/Templates/Components/Roll-Dice.hbs вы увидите следующее

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

Отличный фреймворк для веб-приложений

Управление передачей данных между клиентом и сервером

В конце концов, вы хотите позволить приложению "бросать" кости. Эта функциональность включает в себя взаимодействие с сервером. Сервер отвечает за хранение "игральных костей" и результатов. Применяется именно такая последовательность.

  • Пользователь определяет параметры игральной кости, которую он хочет "бросить".
  • Пользователь нажимает на кнопку бросить кости.
  • Браузер отправляет данные, введенные пользователем, на сервер.
  • Сервер "бросает" кости, запоминает результат и отправляет его клиенту.
  • Браузер отображает результат "броска кубиков".

Ember может реализовать описанный выше сценарий с помощью магазина, дополненного моделью. Это хранилище является единственным источником истинной информации для всего приложения, и каждая модель представляет различную информацию, хранящуюся в хранилище. Модели указывают серверу, как хранить данные, а хранилище знает, как строить модели и работать с ними.

Передача управления от компонентов маршрутам

При обработке приложений важно соблюдать разделение ответственности между подсистемами. Корень (и аудиторы, о которых мы не говорим) должен иметь доступ к хранилищу. Модели не должны иметь доступа к хранилищу.

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

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

ЧИТАТЬ ЕЩЁ:  Где хранится информация, собранная о нас в интернете

В файл, отвечающий за логику маршрута, App/routes/roll.js, необходимо добавить следующие блоки, которые записывают энергию, которая будет выполняться.

В файле кода компонента, App/Components/Roll-Dice.js, оператор энергии должен вызываться при наступлении соответствующего события. Для этого используется возможность отправки существующих операторов.

Наконец, то, что было сделано, необходимо соединить с компонентами и маршрутом. Это делается в корневом стандарте — APP/ TEMPLATES/ROLL.HBS. Здесь вам нужно изменить способ отображения элемента.

Эта структура указывает элементу, что ролевое свойство связано с Saveroll Energy в корне. Это имя, Roll, затем используется для элемента, чтобы указать элемент, на котором был выполнен 'roll'. Это название имеет смысл для нашего компонента, поскольку мы знаем, что он используется для запроса "броска игральной кости", но связанное с ним действие не касается работы другого кода или судьбы отправленной информации.

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

Размещение данных в хранилище

Прежде чем поместить данные в хранилище, необходимо определить модель представления данных. Это делается в известном Ember-Cli путем создания структуры в файловой системе и последующего ее заполнения.

Чтобы создать класс модели, выполните следующую команду: model-class.ember-cli.org.uk.

Затем смоделируйте функциональность, с которой вы хотите, чтобы работала модель. Для этого внесите изменения в app/model/roll.js.

Вызов Ds.ATTR определяет новую функцию для определенного типа. Поддерживаемые типы включают строки, числа, даты и булевы волны, но при необходимости вы можете определить свои собственные типы.

Используя все это, вы можете в конечном итоге "бросить" кости и сохранить результат. Это делается путем манипулирования репозиторием из экшена в app/routes/roll.js.

Если вы попробуете это сделать, то увидите, что при нажатии на кнопку броска кубиков (игральных костей) активируется сетевой запрос к серверу. Однако этот запрос не удается выполнить, поскольку пока нет сервера, но даже это уже большой шаг вперед.

Отличный фреймворк для веб-приложений

Этот документ посвящен ember.js. В нем не объясняется, как организовать сервер приложений. Если вам нужно разрабатывать Ember.js без серверной части, вы можете организовать хранение данных локально. Например, используйте адаптер Ember-LocalStorage-Adapter, чтобы организовать работу с данными только в браузере. В противном случае просто создайте соответствующее серверное приложение. Если сервер и клиент функционируют должным образом, приложение будет работать.

Загрузка данных из хранилища

Поскольку в хранилище есть некоторые данные, необходимо их восстановить. Одновременно создается индексный путь, который используется для обработки исходной страницы.

В Ember есть -in Route, построенный индекс, который используется для завершения первой страницы приложения. Если этот файл маршрута не существует, система не сообщит об ошибке, но на экране ничего не появится. Этот маршрут используется для печати истории кубиков из хранилища.

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

Оператор маршрута находится в файле app/routes/index.js, где необходимо разместить следующий код.

Код маршрута имеет прямой доступ к хранилищу и может загрузить все сохраненные данные кубиков с помощью метода Findall. Затем эти данные приводятся к стандарту с помощью метода Модели.

Стандартный корневой индекс описан в app/ templates/index.hbs.

Этот код обеспечивает прямой доступ к модели непосредственно из корня и создает строку таблицы через набор данных. Страница будет выглядеть как страница, содержащая результаты предыдущего "броска".

Отличный фреймворк для веб-приложений

Итоги

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

Использование Ember может значительно повысить эффективность разработки фронтенда. В отличие от таких библиотек, как React, Ember предоставляет целостную инструментальную среду, предназначенную для разработки полнофункциональных приложений без необходимости использования дополнительных инструментов. Наличие Ember-Cli и протероматизация проектов очень полезны, упрощая процесс разработки и уменьшая количество ошибок на всех этапах работы. Добавьте поддержку сообщества, и вы увидите, что в Ember можно сделать все.

К сожалению, интегрировать Ember в существующие проекты сложно или невозможно. Лучше всего использовать Ember с самого начала нового проекта. Кроме того, то, что известно как "Out of the Box", обрабатывает разделы сервера приложений очень странным образом. Если существующий сервер не соответствует модели Ember, разработчики могут потратить много времени и усилий на переработку бэкенда или поиск (или написание) плагинов, которые могут работать с тем, что есть.

Ember — это мощный каркас, который позволяет очень быстро создавать полнофункциональные веб-приложения на стороне клиента. Она накладывает множество требований на структуру кода проекта, но на практике эти требования часто не так строги, как кажется, поскольку код должен быть структурирован.

Оцените статью