Статьи

Начало работы с Ember и Ember CLI

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

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

Полный код этой статьи доступен на GitHub .

Как установить Ember CLI

Чтобы установить Ember CLI, сначала нужно установить несколько зависимостей. Первый — Node.js. Вам нужна как минимум версия 0.12.x. Далее требуется установка Bower , операцию которую можно выполнить с помощью команды:

npm install -g bower 

Затем, чтобы установить Ember CLI, выполните команду:

 npm install -g ember-cli 

Как создать новый Ember Project

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

 ember new contactmanager 

На втором этапе введите каталог, а затем установите все зависимости npm и Bower с помощью следующих команд:

 cd contactmanager npm install bower install 

На этом этапе загрузите встроенный сервер Ember, выполнив:

 ember serve 

Ваше новое приложение теперь доступно по адресу localhost:4200 . Это порт по умолчанию для приложения Ember, работающего на вашем локальном компьютере, но вы можете изменить его, если хотите. Если вы выполнили все указанные этапы, в браузере должен появиться заголовок с надписью «Добро пожаловать в Ember».

Конвенция и структура Ember

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

Маршрутизатор и Маршруты

Маршруты являются точками входа для приложения Ember. Маршруты определяются в файле app/router.js с использованием Router . Они позволяют вам иметь доступ к другой части вашего приложения. Например, если вы решили, что вам нужно управлять пользователями в вашем приложении, вы должны определить маршрут users . Вы можете сделать это, используя следующий синтаксис:

 Router.map(function() { this.resource('users', function() {}); }); 

Это создаст для нас следующие URL:

  • /users/
  • /users/index/
  • /users/loading/

Традиционно, когда вы определяете маршрут, Ember ожидает найти другие связанные типы, такие как маршрут, контроллер и шаблон. Мы можем решить создать эти типы явно или разрешить Ember создавать их для нас. Во многих приложениях вам, скорее всего, придется создавать их самостоятельно, но решать вам.

Помните, что важно различать Router и Route . Структуры URL, которые мы создали выше, сделаны с использованием Router . Они показывают только наше намерение сделать эти URL доступными в нашем приложении. Мы не создали фактические маршруты, а только URL для этих маршрутов. Чтобы создать Route , мы должны следовать этой процедуре в папке маршрутов. Если вы не уверены, не беспокойтесь, так как я углублюсь в эту тему позже в этой статье.

Контроллер

Контроллеры — это тип, используемый для хранения состояния просмотра и расположенный в папке app/controllers . Они работают рука об руку с маршрутами. В этом случае вышеуказанный URL-адрес соответствует /user/ и будет нуждаться в контроллере под названием /users/ . Также здесь, мы можем свободно выбирать, определяем ли мы это сами или нет. Контроллеры также определяют обработчики событий для таких действий, как щелчки, зависания и т. Д.

Шаблон

Шаблон является презентационной частью Ember. Вы пишете это на языке шаблонов под названием Handlebars, который компилируется в обычный HTML. Шаблоны находятся в папке app/templates .

Компонент

Компоненты — это небольшие самостоятельные элементы функциональности. Вы можете думать о них как о сочетании презентации и функциональности, которые можно использовать повторно и которые легко обслуживать.

Эмбер-Data

Это библиотека, поддерживаемая основной командой Ember, которая дополняет ядро ​​Ember и выступает в качестве внешнего ORM для управления моделями данных. Существуют и другие альтернативы, которые я не использовал ранее и выходит за рамки этой статьи, так как мы будем использовать Ember-data.

Приложение

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

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

Создать пользовательскую модель

Переместитесь в папку проекта и создайте модель пользователя, используя:

 ember generate model user 

Это создаст файл с именем user.js внутри app/models с таким содержимым:

 import DS from 'ember-data'; export default DS.Model.extend({ }); 

Сделайте необходимые изменения, чтобы оператор экспорта выглядел так:

 export default DS.Model.extend({ firstName: DS.attr(), lastName: DS.attr(), addressLine: DS.attr(), postCode: DS.attr(), country: DS.attr() }); 

Это определяет свойства нашей пользовательской модели.

Создать маршрут пользователя

Теперь добавьте следующие строки в ваш файл router.js чтобы сделать некоторые URL-адреса доступными для нас:

 Router.map(function() { this.resource('users', function() { this.route('show',{path: '/:user_id'}); this.route('edit',{path: '/:user_id/edit'}); }); }); 

У нас есть три новых URL. Одним из них является список пользователей, другой для просмотра одного пользователя и последний для редактирования информации о пользователе. Далее, давайте создадим маршрут пользователя, используя:

 ember generate route users 

Этот маршрут будет использоваться для получения нашего списка пользователей. Измените его содержимое следующим фрагментом:

 import Ember from 'ember'; export default Ember.Route.extend({ model: function(){ return this.store.find('user'); } }); 

Настройте данные прибора и создайте пользовательский шаблон

На данный момент, давайте добавим некоторые временные данные в наше приложение. Для этого выполните команду

 ember generate adapter application 

Это создает файл с именем application.js в папке app/adapters/ . По умолчанию Ember использует RestAdapter для запроса моделей. Этот адаптер предполагает, что у вас есть внутренняя система, которая передает данные JSON вашему клиентскому приложению Ember. Поскольку у нас нет бэкэнда, в этом случае мы хотим использовать данные о приборах. Поэтому мы обновим код адаптера следующим образом:

 import DS from 'ember-data'; export default DS.FixtureAdapter.extend({ }); 

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

 User.reopenClass({ FIXTURES: [{ id: 1, firstName: 'James', lastName: 'Rice', addressLine: '66 Belvue Road', postCode: 'M235PS', country: 'United Kingdom' }] }); 

Если вы перейдете по URL localhost:4200/users , вы увидите только старое приветственное сообщение, а не добавленные нами данные пользовательских фикстур. Чтобы увидеть пользовательские данные, нам нужно создать шаблон для пользователей с помощью команды:

 ember generate template users 

Это создает файл с именем users.hbs в папке app/templates/ . Откройте этот файл и обновите его содержимое следующим образом:

 <ul> {{#each user in model}} <li>{{user.firstName}} {{user.lastName}} <span>Edit</span></li> {{/each}} </ul> {{outlet}} 

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

Показать одного пользователя

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

 <li> {{#link-to 'users.show' user}} {{user.firstName}} {{user.lastName}} {{/link-to}} <span>Edit</span> </li> 

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

Запустите команду:

 ember generate template users/show 

На данный момент созданный шаблон ( app/templates/users/show.hbs ) пуст. Откройте его и добавьте следующий код:

 <p>{{#link-to 'users' }}back{{/link-to}} to Users</p> <p>First Name: {{model.firstName}}</p> <p>Last Name: {{model.lastName}}</p> <p>Address: {{model.addressLine}}</p> <p>Postcode: {{model.postCode}}</p> <p>Country: {{model.country}}</p> 

При этом вы сможете увидеть полную информацию о каждом пользователе, на которого вы нажали.

Редактировать одного пользователя

Если вы хотите редактировать одного пользователя, вам нужно выполнить несколько простых шагов. Для начала сначала создайте ссылку на маршрут редактирования пользователя, обернув текст « Edit рядом с именем каждого пользователя ссылкой. Затем измените Edit на

 {{#link-to 'users.edit' user }}Edit {{/link-to}} 

Далее, давайте сгенерируем пользовательский контроллер, используя:

 ember generate controller users/edit 

Внутри (пользовательский контроллер) измените содержимое так, как указано ниже:

 import Ember from 'ember'; export default Ember.Controller.extend({ actions: { saveUser: function(user){ user.save(); this.transitionToRoute('users'); } } }); 

После этого создайте шаблон для редактирования пользователей, используя:

 ember generate template users/edit 

В новом шаблоне app/templates/users/edit вставьте следующий код:

 <p>{{#link-to 'users' }}back{{/link-to}} to Users</p> <form {{action 'saveUser' model on='submit' }} > <p>First Name: {{input value=model.firstName}}</p> <p>Last Name: {{input value=model.lastName}}</p> <p>Address: {{input value=model.addressLine}}</p> <p>Postcode: {{input value=model.postCode}}</p> <p>Country: {{input value=model.country}}</p> <p><input type="submit" value="Save" ></p> </form> 

Этот код вызывает saveUser() на нашем контроллере, когда мы отправляем форму. Функция передается редактируемому пользователю и сохраняет измененную информацию.

С этим изменением, когда вы нажимаете на ссылку редактирования для пользователя, вы можете редактировать его данные. Вы можете сохранить их, нажав кнопку «Сохранить», после чего вы будете перенаправлены обратно в список пользователей. Ура! Теперь у нас есть простой менеджер списков контактов.

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

Выводы

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

Я надеюсь, что вам понравилось читать этот учебник и вы узнали что-то новое о том, как использовать такую ​​мощную, но простую инфраструктуру JavaScript в ваших проектах. Пожалуйста, дайте нам знать ваши мысли в комментариях ниже. Вы можете найти код для приложения на GitHub .