Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Extinguish the Fire with Ember.js
Search
Peter Brown
February 12, 2014
Technology
6
470
Extinguish the Fire with Ember.js
Presented to the Burlington Web application group at the Front end framework faceoff.
Peter Brown
February 12, 2014
Tweet
Share
More Decks by Peter Brown
See All by Peter Brown
Make the Internet Great Again with Glimmer.js
beerlington
0
150
History of a Thriving Codebase
beerlington
2
360
Introduction to ClassyEnum and Friends
beerlington
1
210
Lighting Up with Ember.js
beerlington
8
540
Networking Refactored
beerlington
1
94
Intro to Object Oriented Programming in Ruby
beerlington
10
1k
Responsible Metaprogramming in Rails
beerlington
3
740
BTVWAG Survey Results
beerlington
1
190
Behavior Driven Development
beerlington
2
900
Other Decks in Technology
See All in Technology
One engineer company with Ruby on Rails
rstankov
2
470
TDD - Test Driven Drupal
opdavies
0
3k
uvを使ってストレスフリーな Python開発をしよう!
r74tech
0
260
今年のRubyKaigiはProfiler Year🤘
osyoyu
0
530
さらばあのボタンとは言わせない SORACOM LTE-M Button powerd by AWSをまだ使えるようにした(前編?)
miura55
0
110
M5と自作基板をくっつけてみた〜M5 Japan Tour 2024 Spring 福冈 (Fukuoka|福岡)〜
keropiyo
1
250
自らを知り外と繋がる、日経のエンジニア採用とDevRel活動/devreljp92
nishiuma
2
190
コードや知識を組み込む / Incorporate Code and knowledge
ks91
PRO
0
160
Babylon.js JAPAN活動紹介 (2024/4)
limes2018
1
130
Microsoft for Startups Founders Hub_20240429 update
daikikanemitsu
1
2.5k
AWS アーキテクチャ作図入門/aws-architecture-diagram-101
ma2shita
16
6.5k
Autonomous Database Cloud 技術詳細 / adb-s_technical_detail_jp
oracle4engineer
PRO
15
35k
Featured
See All Featured
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
14
8.4k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
226
51k
Code Review Best Practice
trishagee
56
15k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
0
50
Bootstrapping a Software Product
garrettdimon
PRO
302
110k
Infographics Made Easy
chrislema
238
18k
Keith and Marios Guide to Fast Websites
keithpitt
408
22k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
22
1.4k
Designing with Data
zakiwarfel
96
4.8k
StorybookのUI Testing Handbookを読んだ
zakiyama
13
4.6k
Fontdeck: Realign not Redesign
paulrobertlloyd
76
4.9k
Testing 201, or: Great Expectations
jmmastey
30
6.4k
Transcript
EXTINGUISH THE FIRE WITH EMBER.JS BTVWAG - Feb 12, 2014
Presented by Peter Brown
WEB DEVELOPER @beerlington
PROBLEMS ‣ Client side development is challenging ‣ Expectations about
how websites should work ‣ Single page applications aren’t always that ‣ Lack of conventions
HYPOTHESIS As browsers become more capable and JS enables us
to do more, the applications we build will become more ambitious and require better tools. Complexity Capability
A framework for creating ambitious web applications Write dramatically less
code Built for productivity Don't reinvent the wheel EMBER.JS
WHAT DOES EMBER LOOK LIKE?
ROUTER Maps a URL to a Route App.Router.map(function() {! this.resource('posts');!
this.resource('post', { path: '/post/:post_id' });! });!
ROUTER /posts → PostsRoute /post/123 → PostRoute App.Router.map(function() {! this.resource('posts');!
this.resource('post', { path: '/post/:post_id' });! });!
ROUTER Nested Routes App.Router.map(function() {! this.resource('post', { path: '/post/:post_id' },
function() {! this.route('edit');! this.resource('comments', function() {! this.route('new');! });! });! });!
ROUTER /post/123 → PostRoute /post/123/edit → PostEditRoute /post/123comments → CommentsRoute
/post/123/comments/new → CommentsNewRoute App.Router.map(function() {! this.resource('post', { path: '/post/:post_id' }, function() {! this.route('edit');! this.resource('comments', function() {! this.route('new');! });! });! });!
ROUTE Responsible for loading data, displaying templates and setting up
application state. App.PostRoute = Ember.Route.extend({! model: function(params) {! return this.store.find('post', params.post_id);! }! });!
CONTROLLER Acts as a proxy to the model and handles
events from the template App.PostController = Ember.ObjectController.extend({! actions: {! publishPost: function() {! this.toggleProperty('isPublished');! }! }! });!
TEMPLATE Handlebars = HTML + embedded expressions Hello, <strong>{{firstName}}</strong>!!
TEMPLATE Hello, App.ApplicationController = Ember.Controller.extend({! firstName: "Peter"! });! The PostRoute
“glues” these together
TEMPLATE Automatically bound to controller’s state {{#if isPublished}}! <span>! This
post is published!! </span>! {{else}}! <span>! This post is NOT published!! </span>! {{/if}}!
MODEL Defines schema and relationships App.Post = DS.Model.extend({! title: DS.attr('string'),!
publishedAt: DS.attr('date'),! author: DS.belongsTo('author')! });!
VIEW When you need more control, used less frequently, always
associated with a controller var view = Ember.View.create({! templateName: 'say-hello',! name: "Bob"! });!
COMPONENT Custom HTML elements, like views without controller <script type="text/x-handlebars"
id="components/blog-post">! <h1>Blog Post</h1>! <p>Lorem ipsum dolor sit amet.</p>! </script>!
DATA AND EVENT RELATIONSHIPS
DATA BINDING Route View Model Controller Template
EVENT BUBBLING View Model Controller Template Route
UPDATING DATA View Controller Template Model Route
EMBER’S ADVANTAGES
ARCHITECTURE ‣ Supports application growth via: • Organization • Eliminating
boilerplate • Sensible conventions ‣ Encapsulation • Loose coupling between components
APPLICATION SPEED ‣ 100% of HTML rendering is in browser
‣ Server is responsible for data via API Requests
OBJECT MODEL ‣ Computed properties • with and without aggregate
data ‣ Observers ‣ Bindings • two-way default, one-way for performance
MASTER-DETAIL INTERFACE
MASTER-DETAIL INTERFACE
FRIENDLY DOCUMENTATION
RAILS INFLUENCE ‣ Convention over configuration • Naming conventions (code
+ files) • If it feels painful, you’re likely doing it wrong ‣ REST architecture
EMBER’S DISADVANTAGES
LEARNING CURVE Frustration Time
SPRINKLES OF JAVASCRIPT
HANDLEBARS
EMBER DATA BETA!
WHAT’S COMING?
EMBER DATA 1.0
BUILD TOOLS ‣ Modules as first-class citizens (ES6 modules) ‣
Built-in Bower support ‣ CLI commands • $ ember server • $ ember test
HTMLBARS ‣ Performance gains ‣ Faster Rendering (comparable to React)
‣ Will build DOM instead of strings
HTMLBARS <img {{bind-attr src=imageUrl}}> Before After <img src="{{imageUrl}}">!
OTHER FUN STUFF ‣ Slimming down the codebase ‣ Removing
jQuery dependency ‣ Continued support for IE8
HONORABLE MENTION
HONORABLE MENTION
“What kind of application are you building?” Tom Dale -
Ember co-creator