About
Original author: Yehuda Katz

a member of the jQuery and Ruby on Rails core teams
Developers: Ember Core Team
Initial release: 8 December 2011
Stable release: 2.4.3 / March 17, 2016
License: MIT License
Ember.js is an open-source JavaScript web framework,
based on the model–view–controller (MVC) pattern.
More productive out of the box.
Write dramatically less code with
Ember's Handlebars integrated
templates that update
automatically when the
underlying data changes.
Don't waste time making trivial
choices. Ember.js incorporates
common idioms so you can focus
on what makes your app special,
not reinventing the wheel.
Ember.js is built for productivity.
Designed with developer
ergonomics in mind, its friendly
APIs help you get your job done
—fast.
A framework for creating ambitious web applications.
Major users
How to start
• Console :)
• Node JS
• npm
You should have on your PC:
Main advantages
• Ember CLI and generators
• Similarity with Backend frameworks
• Convention Over Configuration
• Add-on ecosystem
• Ember Inspector
Main advantages
• Ember CLI and generators
• Similarity with Backend frameworks
• Convention Over Configuration
• Add-on ecosystem
• Ember Inspector
Main advantages
• Ember CLI and generators
• Similarity with Backend frameworks
• Convention Over Configuration
• Add-on ecosystem
• Ember Inspector
Main advantages
• Ember CLI and generators
• Similarity with Backend frameworks
• Convention Over Configuration
• Add-on ecosystem
• Ember Inspector
Main advantages
• Ember CLI and generators
• Similarity with Backend frameworks
• Convention Over Configuration
• Add-on ecosystem
• Ember Inspector
Concepts
1. The Object Model



Plain Javascript objects lack the ability to observe
when properties change.



Object Model augments Javascript objects with
observers, computed properties, inheritance, mixins
and other useful functions.
Concepts
Concepts
2. Routing



Ember is URL-driven so it always starts at the URL.

Router send us to route where we can get data.

Based on Convention over configuration.
3. Models



Plain objects, Ember objects for sync calls and
Promises for async calls.
Concepts
4. Services



An Ember.Service is a long-lived object (singleton)
used to provide services to other Ember objects. It
directly extends Ember.Object but uses its own class
name to encourage the services architecture pattern.
Concepts
5. Components



Components consist of two parts: a Javascript
component file (behavior) and its accompanying
template file (view).



Components are isolated by design. They are not
aware of their surrounding context, but they have
input through their attributes and can send messages
up to the route.
Concepts
Not clear yet?..
run!

ember new todo-app
Cheatsheet
• ember new todo-app
• ember generate route todos
• ember generate component todo-widget
// app/routes/todos.js
import Ember from 'ember';
export default Ember.Route.extend({
model() {
return [
{ text: "Create Ember app" },
{ text: "Read Ember Igniter" },
{ text: "Master Ember" }
]
}
});
{{! app/templates/todos.hbs }}
{{todo-widget todos=model}}
{{! app/templates/components/todo-widget.hbs }}
<ul>
{{#each todos as |todo|}}
<li>{{ todo.text }}</li>
{{/each}}
</ul>
• ember generate component add-todo
{{! app/templates/components/add-todo.hbs }}
<form {{action "submit" on="submit"}}>
{{input value=text}} <button type="submit">OK</button>
</form>
// app/components/add-todo.js
import Ember from 'ember';
export default Ember.Component.extend({
actions: {
submit() {
const text = this.get('text');
this.get('onAdd')(text);
}
}
});
{{! app/templates/components/todo-widget.hbs }}
{{add-todo onAdd=(action 'addTodo')}}
<ul>
{{#each todos as |todo|}}
<li>{{ todo.text }}</li>
{{/each}}
</ul>
// app/components/todo-widget.js
import Ember from 'ember';
export default Ember.Component.extend({
actions: {
addTodo(text) {
this.get('todos').pushObject({ text: text });
}
}
});
// app/components/add-todo.js
import Ember from 'ember';
export default Ember.Component.extend({
actions: {
submit() {
const text = this.get('text');
this.get('onAdd')(text);
this.set('text', "");
this.$('input').focus();
}
}
});
{{! app/templates/application.hbs }}
<h2 id="title">TO-DO list</h2>
<ul>
<li>
{{#link-to "index"}}
Mainpage
{{/link-to}}
</li>
<li>
{{#link-to "todos"}}
Todos
{{/link-to}}
</li>
</ul>
{{outlet}}
OK
Patterns
• MVC (MV*)
• Observer
• Adapter
• Template method
• Singleton
Patterns
• MVC (MV*)
• Observer
• Adapter
• Template method
• Singleton
Patterns
• MVC (MV*)
• Observer
• Adapter
• Template method
• Singleton
Patterns
• MVC (MV*)
• Observer
• Adapter
• Template method
• Singleton
Patterns
• MVC (MV*)
• Observer
• Adapter
• Template method
• Singleton
Other frameworks
Ember 

vs

Angular

vs
Backbone
Google Search Statistic
Questions?
Links
• http://emberjs.com/
• http://emberigniter.com/new-to-ember-cli-start-here-2016-tutorial/
• http://airpair.com/js/javascript-framework-comparison
• http://emberigniter.com/5-essential-ember-2.0-concepts/
• http://emberjs.com/ember-users/
• http://ryantablada.com/post/why-i-chose-ember-js
• https://www.airpair.com/js/javascript-framework-comparison
• http://emberigniter.com/new-to-ember-cli-start-here-2016-tutorial/
• https://www.codeschool.com/blog/2015/10/26/7-reasons-to-use-ember-js/
• https://www.airpair.com/js/javascript-framework-comparison

Ember presentation