Ember.js veröffentlicht neue Features nicht mit den Major-Releases, sondern mit den Minor-Versionen. Major-Versionen werden dazu genutzt, die Code-Basis aufzuräumen und zuvor als deprecated markierte Features auszusortieren. Minor-Releases führen dann neue Features ein. So auch Ember.js 3.1, das nun erschienen ist. Drei neue Features sind im Release enthalten. Außerdem sind zwei Deprecations mit dabei.
ES5 Getters in Ember.js 3.1
Das erste neue Feature sind ES5 Getters, die nun nativ zur Verfügung stehen. Bislang wurden in Ember noch set
und get
genutzt, die auf SproutCore zurückgingen, also nicht in nativem JavaScript implementiert waren. Mit Version 3.1 ist das nun anders. Diese Änderung folgt laut den Release Notes dem Reifungsprozess, den die native Implementierung von Settern und Gettern in JavaScript mit den Jahren durchlaufen habe. Nun stehen also native ES5 Getter zur Verfügung, mit denen die Werte von computed Properties ausgelesen werden können. Melanie Sumner und Kenneth Larsen geben im Ember-Blog folgendes Beispiel für die Implementierung:
import Component from '@ember/component'; import { computed } from '@ember/object'; export default Component.extend({ name: computed('firstName', 'lastName', function() { return `${this.firstName} ${this.lastName}`; }), message: computed('name', function() { return `Hello ${this.name}!`; }) });
Damit könne aber nicht gänzlich auf die Verwendung der Legacy-Funktion get
verzichtet werden, so die Autoren der Release Notes. Im Fall von Chained Paths, bei Verwendung von unknownProperty
und in manchen Anwendungsfällen in Ember Data müsse weiterhin damit gearbeitet werden. Details dazu können dem Blogpost zum Release entnommen werden. Für die Migration steht ein von der Community entwickeltes Tool zur Verfügung, das bestehende Codebases auf ES5 Getter aktualisiert.
Optionale Features in Ember
Aufgrund der Deprecation-Strategie von Ember wurden außerdem optionale Features eingeführt. Grundsätzlich werden zu neuen Major-Releases nur dann Breaking Changes vorgenommen, wenn diese bereits lange im Voraus bekannt waren und in den vorherigen Minor-Releases angekündigt wurden. Das habe, so der Blogpost zum Release, aber zu Verzögerungen bei der Umsetzung einiger Änderungen geführt. Das neue Optional Features ist ein Command Line Tool für Ember, das via @ember/optional-features
von npm bezogen werden kann und dieses Problem nun lösen soll. Das Tool selbst verändert nichts an Ember, allerdings könnten Breaking Changes damit künftig optional ein- und ausgeschaltet werden. Ember 3.1 bringt nun auch zwei optionale Features mit, die darüber verwendet werden können: den Application Template Wrapper, mit dem der <div>
-Wrapper deaktiviert werden kann und Template-only Glimmer Components, die die Arbeit am dem DOM erleichtern sollen.
Auch interessant: Achtung, Aufräumarbeiten: Ember 3.0 ist da!
Das dritte neue Feature in Ember 3.1 ist ein Bugfix für Positional Parameters in Contextual Components. Als Deprecated markiert wurden der Aufruf von array.get('@each')
und die privaten APIs propertyWillChange
und propertyDidChange
, die nach der Long-Term-Support-Phase von Ember 3 entfernt werden sollen.
Ember 3.2 Beta
Ember 3.1 ist fertig und steht zum Download bereit. Parallel zum Release der Minor-Version wurde auch die Beta-Version von Ember 3.2 veröffentlicht. Diese bringt einen neuen Helper mit, mit dem Bindings in Templates eingefügt werden können, ohne diese als Properties des entsprechenden Controllers oder der Component definieren zu müssen. Außerdem bringt Ember 3.2 drei neue Deprecations mit. Dazu gehört, dass Ember.Logger
deprecated wurde und nun console
genutzt werden soll. Auch Ember#route
soll entfernt werden, hier wurde allerdings nur eine Umbenennung vorgenommen: Router#_route
. Außerdem gibt es ein Update für direkt zugewiesene computed Properties. Zu allen Deprecations beider Versionen gibt es jeweils eigene Deprecation-Pages, die über die Neuerungen und nötigen Anpassungen an bestehendem Code informieren.
Wie immer wurden auch Ember Data und Ember CLI mit Ember.js in neuen Versionen veröffentlicht. Die Neuerungen an diesen Tools können ebenfalls im Blogpost zum Release von
Melanie Sumner und Kenneth Larsen nachgelesen werden. Ember.js 3.1 kann via npm bezogen werden.