Релиз EMBER.JS 2.2 и 2.3 BETA


Сегодня был выпущен Ember.js 2.2 — «минорная версия» Ember с обратно совместимыми изменениями. Этот релиз представляет собой результат работы более 60 разработчиков.

Также сегодня появился Ember.js 2.3 beta — сборка из ветки beta, которая станет стабильной версией строго через шесть недель.

Изменения в EMBER.JS 2.2

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

Среди важных улучшений можно отметить исправление производительности для реализации метода _super при минимизации и игнорирование логики локальных view (представления) и controller (контроллера) шаблона при работе без представления и контроллера прежних дополнений.

Чтобы получить больше информации об изменениях в версии 2.2, смотрите Ember.js 2.2.0 CHANGELOG.

EMBER.JS 2.3 BETA

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

API visit

Ember FastBoot и новые тестируемые API послужили стимулом для добавления метода visit для объектов Ember.Application и Ember.ApplicationInstance. При вызове на Ember.Application этот метод принимает несколько параметров настройки.

Например, вы можете использовать этот API, чтобы вручную загрузить приложение Ember и указать ему перейти по какому-либо URL:

import MyApp from 'my-app';

$(function() {
  let App = MyApp.create({ autoboot: false });
  let options = {
    // Prevent this application from updating the URL in the address bar
    location: 'none',
    // Override the default `rootElement` to render into a specific `div`
    // on the page
    rootElement: '#demo'
  };
  App.visit('/demo', options).then((/* appInstance */) => {
    $('#loading').fadeOut(); // Or any other logic after rendering
  });
});

Добавление этого API означает, что FastBoot теперь можно использовать с Ember.js beta. А это важно, так как сам FastBoot находится в тестовом режиме, и это первый случай, когда его стало возможно использовать с предварительными сборками Ember.js. Если вы хотите попробовать FastBoot, то лучше всего начать отсюда: README.md for ember-cli-fastboot.

Вы можете узнать больше о API visit и случаях его употребления в неопубликованной документации по API visit. Также будет нелишним просмотреть выполнение запроса на включение в emberjs/emberjs #12394 и интеграцию этого API в FastBoot в tildeio/ember-cli-fastboot #71.

Выражаем большую благодарность @tomdale и @chancancode за реализацию этого API и их продолжающуюся работу над FastBoot.

Помощник HASH

Помощник (hash создает объект из аргументов, которые были переданы ему во время вызова, и затем возвращает этот объект. Например, здесь помощник создаст объект со свойством name:

{{#with (hash name='Bob') as |person|}}
  Hello, my name is {{person.name}}
{{/with}}

Этот помощник представлен в версии 2.3 beta, чтобы внести больше удобства в использование появившихся здесь контекстуальных компонентов. Он часто будет использоваться с помощником {{yield. Например:

{{! app/templates/components/nice-person.hbs }}
{{yield (hash name='Bob')}}
{{! app/templates/index.hbs }}
{{#nice-person as |person|}}
  Hello, my name is {{person.name}}
{{/nice-person}}

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

Благодарим @Serabe за реализацию функции и @MiguelCamba за его потрясающее дополнение ember-hash-helper-polyfill. С помощью полизаполнения вы можете использовать (hash с Ember.js 1.13 и выше.

Контекстуальные компоненты

Контекстуальные компоненты позволяют нескольким компонентам обмениваться данными в закрытом виде, но сохранять гибкость при вызове. Например, ниже {{alert-box}} создает контекстуальный компонент, состоящий из компонента alert-box-button и атрибута onclick:

{{! app/templates/components/alert-box.hbs }}
<div class="alert-box">
  {{yield (hash
    close-button=(component 'alert-box-button' onclick=(action 'close'))
  )}}
</div>
{{! app/templates/index.hbs }}
{{#alert-box as |box|}}
  Danger, Will Robinson!
  <div style="float:right">
    {{#box.close-button}}
      It's just a plain old meteorite.
    {{/box.close-button}}
  </div>
{{/alert-box}}

Контекстуальные компоненты создаются при использовании вложенной формы помощника component. Им могут передаваться атрибуты и позиционные параметры. Контекстуальные компоненты должны вызываться с . в пути, если только они не передаются вызывающему помощнику {{component.

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

Чтобы получить больше информации о контекстуальных компонентах, смотрите неопубликованную документацию. Также детали о проектных решениях API можно найти в RFC #64.

И вновь выражаем благодарность @Serabe за его реализацию этой функции, а также @mixonic и @_mmun за их старания в RFC и разработке.

OWNERS и устаревшие контейнеры

API container в Ember — один из наиболее используемых закрытых API, который все еще уязвим. В Ember.js 2.1 главная перестройка кода в загрузке приложения удалила доступ к контейнеру с инициализаторов и инициализаторов экземпляра, создав альтернативы открытого API.

В Ember 2.3 получение доступа к свойству container на сгенерированном фреймворком объекте будет считаться устаревшим. Вместо этого появится открытый API owner.

Например, этот компонент будет во время работы программы искать аудиосервис на основе audioType его модели:

import Ember from 'ember';
const {
  Component,
  computed,
  getOwner
} = Ember;

// Usage:
//
//   {{play-audio model=audioModel}}
//
export default Component.extend({
  audioService: computed('model.audioType', function() {
    let owner = getOwner(this);
    let serviceName = this.get('model.audioType');
    return owner.lookup(`service:audio-${serviceName}`);
  }),
  click() {
    let player = this.get('audioService');
    player.play(this.get('model.file'));
  }
});

Возвращаемое значение getOwner будет Ember.ApplicationInstance для объектов, которые сгенерированы фреймворком.

Это изменение означает, что для использования Ember 2.3 необходим ember-qunit 0.4.16+.

Для получения более подробной информации о переходе с использования container на getOwner, смотрите руководство по устаревшим элементам. Также информацию по проектным решениям API можно найти в emberjs/emberjs #11874 и emberjs/emberjs #12555.

Выражаем благодарность @dgeb за его неустанные попытки реализовать эту функцию. Кроме того, стоит сказать спасибо @rwjblue за его обновление запросов на включение в Ember DataLiquid-Fire и Ember-i18n. Это отличный пример того, как нужно обновлять дополнение или кодовую базу приложения.

Чтобы получить больше информации об изменениях в версии 2.3, смотрите Ember.js 2.3.0-beta.1 CHANGELOG.


Комментарии (0)

    Выделите опечатку и нажмите Ctrl + Enter, чтобы отправить сообщение об ошибке.