Dave Wasmer
Praxis (discoverpraxis.com)
Psst ... we're hiring!
EmberCamp 2018
Chicago
The Future is Now!
Modern Ember in 2018
Near
Slide 2
Slide 2 text
Dave Wasmer
Head of Engineering @ Praxis
Psst ... we're hiring!
Remote, greenfield product,
dedicated OSS time
Slide 3
Slide 3 text
EmberConf Keynote
March 2018
Slide 4
Slide 4 text
Dave Wasmer
Praxis (discoverpraxis.com)
Psst ... we're hiring!
EmberCamp 2018
Chicago
~6 months later ...
How are we doing?
Slide 5
Slide 5 text
Dave Wasmer
Praxis (discoverpraxis.com)
Psst ... we're hiring!
EmberCamp 2018
Chicago
Statuses:
Complete
⚠ Partially Available
In Progress
Design / Planning
Slide 6
Slide 6 text
Dave Wasmer
Praxis (discoverpraxis.com)
Psst ... we're hiring!
EmberCamp 2018
Chicago
WARNING
Use unstable, canary, or experimental features at your own risk!
Slide 7
Slide 7 text
Dave Wasmer
Praxis (discoverpraxis.com)
Psst ... we're hiring!
EmberCamp 2018
Chicago
Buckle up ...
Slide 8
Slide 8 text
Dave Wasmer
Praxis (discoverpraxis.com)
Psst ... we're hiring!
EmberCamp 2018
Chicago
New File Layout
a.k.a. Module Unification
Slide 9
Slide 9 text
What is it?
•New folder structure
•More explicit usage of code from addons
(i.e. {{use}})
New File Layout
Slide 10
Slide 10 text
Status: ⚠ Partially Available
• Available behind flags
• Still in progress:
• Performance improvements & benchmarking
• Dummy apps falsely detected as MU apps
• Generator updates
• Handle old CLI versions
• MU addon + classic app interop
New File Layout
Slide 11
Slide 11 text
How to use
• Run all commands with these flags
• Add to package.json:
• Then:
New File Layout
$ MODULE_UNIFICATION=true EMBER_CLI_MODULE_UNIFICATION=true ember new modern-ember
"scripts": {
"ember": "MODULE_UNIFICATION=true EMBER_CLI_MODULE_UNIFICATION=true ember"
yarn ember server
Slide 12
Slide 12 text
Dave Wasmer
Praxis (discoverpraxis.com)
Psst ... we're hiring!
EmberCamp 2018
Chicago
& Testing Improvements
a.k.a. async / await & non-jQuery based helpers
Slide 13
Slide 13 text
What is it?
Use async / await in tests:
& Testing Improvements
it('button does something', async function() {
await visit('/');
await click('.button');
expect(currentURL()).to.equal('/something-else');
});
Slide 14
Slide 14 text
Status: Complete
• Actually - async / await is supported in app code
as well (as of 3.4)!
& Testing Improvements
Slide 15
Slide 15 text
Dave Wasmer
Praxis (discoverpraxis.com)
Psst ... we're hiring!
EmberCamp 2018
Chicago
⛴ Named Imports
a.k.a. import only what you need
Slide 16
Slide 16 text
What is it?
Use ES2015 named imports, which can help
unlock treeshaking:
& Testing Improvements
import { computed } from '@ember/object';
Slide 17
Slide 17 text
Status: ⚠ Partially Available
• Named imports themselves are fully supported:
• But treeshaking is still in progress; there's
experimental support via ember-cli-rollup-packager
⛴ Named Imports
import { computed } from '@ember/object';
ember install ember-cli-rollup-packager
Slide 18
Slide 18 text
Dave Wasmer
Praxis (discoverpraxis.com)
Psst ... we're hiring!
EmberCamp 2018
Chicago
Native Classes
a.k.a. ditch the custom object model
Slide 19
Slide 19 text
What is it?
Use native JavaScript class syntax:
Native Classes
export default Component.extends({
"// ""...
});
export default class extends Component {
"// ""...
}
Slide 20
Slide 20 text
Status: ⚠ Partially Available
• Native classes work, with caveats:
• Observers and events don't work
• A few special properties need specific
decorators
Native Classes
Slide 21
Slide 21 text
Status: Design / Planning
RFC 338: Native Class Roadmap
Native Classes
"// Looks like a Component? Treat it like a Component!
export default class FooComponent {
didInsertElement() {
if (this.args.isShowing) {
"// ""...
Slide 22
Slide 22 text
Dave Wasmer
Praxis (discoverpraxis.com)
Psst ... we're hiring!
EmberCamp 2018
Chicago
Angle Brackets
a.k.a. pointy Ember
Slide 23
Slide 23 text
What is it?
Use angle brackets + PascalCase to invoke
components:
Angle Brackets
{{site-header user=this.user class=(if this.user.isAdmin "admin")}}
Slide 24
Slide 24 text
Status: Complete
• Ships natively in 3.4+
• Supported in 2.12 - 3.4 via polyfill addon:
Angle Brackets
ember install ember-angle-bracket-invocation-polyfill
Slide 25
Slide 25 text
Caveats:
• Does not support pathed invocation:
Angle Brackets
{{foo/bar}} ""==>
Slide 26
Slide 26 text
Dave Wasmer
Praxis (discoverpraxis.com)
Psst ... we're hiring!
EmberCamp 2018
Chicago
Named Blocks
a.k.a. named yields, a.k.a. named slots, a.k.a. block slots, a.k.a. ...
Slide 27
Slide 27 text
What is it?
Pass multiple named template blocks into a component:
Named Blocks
{{#x-modal}}
<@header=>
I'm a modal header!"
"
<@body=>
I'm the body"
"
{{/x-modal}}
Slide 28
Slide 28 text
Status: Design / Planning
• Original RFC 226 was merged back in July 2017
• But ...
Named Blocks
Slide 29
Slide 29 text
Dave Wasmer
Praxis (discoverpraxis.com)
Psst ... we're hiring!
EmberCamp 2018
Chicago
Bonus Round
New ideas and developments started after EmberConf!
Slide 30
Slide 30 text
Dave Wasmer
Praxis (discoverpraxis.com)
Psst ... we're hiring!
EmberCamp 2018
Chicago
Semantic Test Helpers
a.k.a. accessibility through tests
Slide 31
Slide 31 text
What is it?
Use semantic, accessibility-based selectors in tests (rather than CSS
based selectors)
Semantic Test Helpers
fillIn('.login-email', '[email protected]')
fillIn('Email', '[email protected]')
Slide 32
Slide 32 text
Status: Design / Planning
• RFC 327 opened in April, discussion is ongoing.
Semantic Test Helpers
Slide 33
Slide 33 text
Dave Wasmer
Praxis (discoverpraxis.com)
Psst ... we're hiring!
EmberCamp 2018
Chicago
Editions
a.k.a. what every other framework uses major semver releases for
Slide 34
Slide 34 text
What is it?
A new release concept to mark a change in Ember's overall
programming model.
Editions
Slide 35
Slide 35 text
Status: Design / Planning
• RFC 371 opened earlier this month, discussion is
ongoing
Editions
Slide 36
Slide 36 text
Dave Wasmer
Praxis (discoverpraxis.com)
Psst ... we're hiring!
EmberCamp 2018
Chicago
The future of Ember looks bright!
near
Slide 37
Slide 37 text
Dave Wasmer
Praxis (discoverpraxis.com)
Psst ... we're hiring!
EmberCamp 2018
Chicago
But we need to show this!
h/t @nullvoxpopuli and @needbee
Slide 38
Slide 38 text
Psst ... we're hiring!
Remote, greenfield product,
dedicated OSS time