Рубрики
Без рубрики

Потрясающие адоны эмбер

Узнайте около пяти потрясающих аддонов Ember Advons, которые вы должны использовать в ваших проектах.

Автор оригинала: Matt Gowie.

Я вскочил обратно в Мир Эмбер после длительного перерыва для проекта клиента в последнее время, и я действительно наслаждаюсь вернемся.

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

Одна из величайших вещей, которые я нашел с момента возвращения к Эмбер, это ошеломляющее количество Эмбердоны ember Это может похвастаться более 4 тысяч пакетов NPM.

Вернувшись в 2015 году, я написал свой собственный маленький аддон Отказ Хотя количество аддонов было большим, то было почти 1/4 размера, это сегодня. Это чертовски круто, на мой взгляд.

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

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

TL; DR : Я собираюсь дать короткие вступления к этим эмбердонам и показать, почему они потрясающие:

  1. Эмбер-декораторы – коллекция потрясающий EMBER CEMPERY ES7 декораторы.
  2. Эмбер-Кли-Опорожки – библиотека для добавления потрясающий Проверки roptime Cont-type проверяют компоненты.
  3. Ember-awesome-macros – коллекция потрясающий (буквально на имя) вычисленные макросы.
  4. Эмбер-правда-помощники – коллекция потрясающий HTMLBARS шаблон помощников, чтобы избежать простых вычисленных свойств, используемых только в шаблонах.
  5. 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.