Я вскочил обратно в Мир Эмбер после длительного перерыва для проекта клиента в последнее время, и я действительно наслаждаюсь вернемся.
Эмбер делится многими сходствами с рельсами, имеет фантастическое сообщество страстных людей, и люди, стоящие за рамками, являются основными сопровождающими источника, которые я пришел, чтобы уважать больше всего.
Одна из величайших вещей, которые я нашел с момента возвращения к Эмбер, это ошеломляющее количество Эмбердоны ember Это может похвастаться более 4 тысяч пакетов NPM.
Вернувшись в 2015 году, я написал свой собственный маленький аддон Отказ Хотя количество аддонов было большим, то было почти 1/4 размера, это сегодня. Это чертовски круто, на мой взгляд.
Когда я начал возвращаться в окружающую среду Ember Dev, я нашел любить ряд новых великих дополнений.
Этот пост – это короткое введение для нескольких моих личных фаворитов, которые я уверен, что использую на любой из моих будущих проектов, и вы должны использовать тоже.
TL; DR : Я собираюсь дать короткие вступления к этим эмбердонам и показать, почему они потрясающие:
- Эмбер-декораторы – коллекция потрясающий EMBER CEMPERY ES7 декораторы.
- Эмбер-Кли-Опорожки – библиотека для добавления потрясающий Проверки roptime Cont-type проверяют компоненты.
- Ember-awesome-macros – коллекция потрясающий (буквально на имя) вычисленные макросы.
- Эмбер-правда-помощники – коллекция потрясающий HTMLBARS шаблон помощников, чтобы избежать простых вычисленных свойств, используемых только в шаблонах.
- Ember-Transe-Action-Helper – библиотека, чтобы добавить потрясающий
Маршрут-Действие
Помощник для пузырей действий к маршруту без контроллера.
Эмберские декораторы
ES7 JavaScript Декораторы Функция (Все еще предложен, но это произойдет) – Sweeeeet. Декораторы добавляют отличный способ подключить многоразовую недвижимость, функцию и изменения класса в простой аннотации в стиле Python. Эмбер-декораторы принимают эту потрясающую идею и применяют его к некоторым из утомительных битов использования Ember.
// Before ember-decorators import Ember from 'ember'; export default Ember.Component.extend({ foo: Ember.inject.service(), bar: Ember.computed('someKey', 'otherKey', function() { var someKey = this.get('someKey'); var otherKey = this.get('otherKey'); return `${someKey} - ${otherKey}`; }), actions: { handleClick() { // do stuff } } }) // After ember-decorators import Component from '@ember/component'; import { action, computed } from 'ember-decorators/object'; import { service } from 'ember-decorators/service'; export default class ExampleComponent extends Component { @service foo @computed('someKey', 'otherKey') bar(someKey, otherKey) { return `${someKey} - ${otherKey}`; } @action handleClick() { // do stuff } }
Насколько круто вы проходите значения для свойств, которые вы пишете вычисляемым опоре? Я люблю это!
Типы опоры Ember-Cli
Если вы никогда не записали какой-либо код React, Rect включает в себя прохладный способ выполнения проверки свойства свойств выполнения, объявляя имена свойств, набрав в определении компонента, а затем делать утверждения против этих реквизитов в режиме разработки.
Это помогает уловить ошибки в начале развития и обеспечения договора на потребителей компонентов. Хотя я никогда не использовал в значительной степени реагировать, это одна особенность этой структуры, которую я полностью наслаждался. Вы можете сделать мой беспорядок JavaScript и HTML немного меньше динамично? Да, пожалуйста. Запишите меня.
Во всяком случае, некоторые умные люди взяли Библиотека RaG Suppy типа И использовал какую-то клей и ленту воздуховода, чтобы сделать его пригодным для использования на компонентах Ember, что является отличным мышлением. Вот пример из одного из моих собственных проектов:
// components/array-input.js import Ember from 'ember'; import PropTypes from 'prop-types'; import Submission from '../models/submission'; const { instanceOf, number, string, func, bool } = PropTypes; export default Ember.Component.extend({ // Component logic removed for brevity propTypes: { model: instanceOf(Submission).isRequired, idx: number.isRequired, value: string, flushValue: func.isRequired, disabled: bool, } });
Это также служит некоторой отличной документацией – теперь наш компонент имеет письменный договор в Кодексе, что это то, что я всегда делал через комментарии класса. Меньше комментариев, больше типов проверки. Хорошая вещь.
Ember Awesome Macros.
Вы знаете все хорошие вещи в Ember.com. *
? Если вы этого не сделаете, Вы должны Отказ Подумайте о Ember-Awesome-macros (EAM) как Ember.combute
, но расширенные и композитные. Тонна тривиальных операций, которые вы обычно пишете полное вычисленное свойство, для которого можно легко обрабатывать OEM. Вот несколько хороших примеров:
// models/submission.js import DS from 'ember-data'; import Ember from 'ember'; import Enum from 'ember-enum/utils/enum'; import Timestamps from '../mixins/timestamps'; import array from 'ember-awesome-macros/array'; import or from 'ember-awesome-macros/or'; const { sort, filter } = array; const { attr, Model, belongsTo, hasMany, PromiseArray } = DS; const states = { 'draft': 'Draft', 'submitted': 'Submitted', 'in_review': 'In Review', 'review_required': 'Review Required', 'completed': 'Completed' }; export default Model.extend(Timestamps, { state: Enum({ options: Object.keys(states), defaultValue: 'draft', }), // ... submissionReviews: hasMany('submission-review'), // ... // CPs isSubmittedOrCompleted: or('state.isSubmitted', 'state.isCompleted'), savedSubmissionReviews: sort(filter('submissionReviews.@each.createdAt', (review) => { return !review.get('isNew'); }), ['createdAt:desc']), // ... });
Краткость этих макросов очень круто, и она экономит не иметь необходимости писать эти абстракции самостоятельно.
Эмбер правда помощники
Сколько раз вы написали Ember.computed.or
или Ember.computed.and
Потому что вам нужна была немного логической логики в шаблоне руль? Куча верно? Больше не надо! Эмбер-правда-помощники предоставляет кучу простых шаблонов, которые позволят вам пропустить все это. Вот часть логики, которую вы можете легко сделать:
{{if (eq a b)}} {{if (not-eq a b)}} {{if (not a)}} {{if (and a b)}} {{if (or a b)}} {{if (xor a b)}} {{if (gt a b)}} {{if (gte a b)}} {{if (lt a b)}} {{if (lte a b)}} {{if (is-array a)}} {{if (is-equal a b)}}
Избегайте One Off Computed Properties, домой домой.
Действие по маршруту Эмбер
Простой, но хороший. Избегайте создания контроллера для базового шаблона просто для передачи действий. Используйте Маршрут-Действие
Хельпер, чтобы легко позвонить в свои действия на текущий маршрут и сохранить все свои действия в ваших компонентах и ваших маршрутах. Вот пример:
// routes/index.js import Ember from 'ember'; export default Ember.Route.extend({ // ... actions: { submit(model) { // ... } } }); // index.hbs {{#bs-form model=model onSubmit=(route-action "submit" model) as |f|}} {{!-- ... --}} {{/bs-form}}
Обертывание
Это просто горстка некоторых из великих эмберовных дополнений, которые там нет. Один другой, что я не включил, но я слышу людей Rave о сложных приложениях, это Эмбер-параллельность Отказ Определенно стоит проверить, если вы управляете кучей async-задач в вашем приложении Ember.
Поделитесь своими любимыми Amber Addons в комментариях ниже!
Мэтт Гово бежит MasterPoint , небольшой консалтинговый магазин, создающий высококачественное программное обеспечение в Интернете, используя технологии, такие как Ruby на рельсах и Emberjs.