This addon provides a polyfill for the native class behavior that was proposed in Ember RFCs #240 and #337.
ember install ember-native-class-polyfill
This polyfill currently supports the latest LTS versions of Ember 3.4 and 3.5.
If used with a more recent version of Ember in an app, it will not include the polyfill, and will warn the user. If included in an addon and used with a more recent version of Ember it will not include the polyfill and it will not warn the user, allowing addon authors to safely include the polyfill and support 3.4+.
IMPORTANT: We only ship the latest patch version of these Ember versions, so if you have a less recent version of Ember, it will be overwritten. If for some reason you want to pin your patch version of Ember, you should also pin the patch version of this polyfill:
{
"dependencies": {
"ember-source": "3.4.8",
"ember-native-class-polyfill":"1.0.6"
}
}
With this polyfill installed, you can extend from any Ember class using native class syntax:
import Component from '@ember/component';
class ButtonComponent extends Component {}
Although it was possible to use native classes before the RFCs, there were some
subtle changes to behavior made to classes as part of the RFCs. Most notably,
constructor
code will occur before init
:
import Component from '@ember/component';
class ButtonComponent extends Component {
constructor() {
super();
console.log('first');
}
init() {
super.init(...arguments);
console.log('second');
}
}
This behavior change was made in preparation for class fields, since they occur
during construction. The subtleties of these methods can be confusing, and as
such, it is recommended that you continue to use init
instead of constructor
for any initialization code in your classes.
Note that this polyfill does not enable the usage of class field or decorators, and does not include any decorators. Ember has not yet added first class support for these features, and support for them will need to be added in future RFCs. This polyfill, and the behaviors shipped in the native class RFCs, solidify the behavior of classes so that we can prepare for both class fields and decorators separately.
If you would like to use these features, you can check out the ember-decorators project. The project is stable and committed to providing a stable API to build on, but cannot provide guarantees on changes to the behavior of decorators and class fields themselves.
git clone <repository-url>
cd ember-native-class-polyfill
yarn install
yarn lint:hbs
yarn lint:js
yarn lint:js --fix
ember test
– Runs the test suite on the current Ember versionember test --server
– Runs the test suite in "watch mode"ember try:each
– Runs the test suite against multiple Ember versions
ember serve
- Visit the dummy application at http://localhost:4200.
For more information on using ember-cli, visit https://ember-cli.com/.
This project is licensed under the MIT License.