Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
EmberJS Introduction - T3CON12
Search
tomdale
October 05, 2012
Technology
1.3k
7
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
EmberJS Introduction - T3CON12
Introduction to Ember.js, presented at the TYPO3 conference in Stuttgart, Germany.
tomdale
October 05, 2012
More Decks by tomdale
See All by tomdale
EmberConf 2019 Keynote
tomdale
1
830
EmberConf 2018 Keynote
tomdale
4
1.9k
Secrets of the DOM Virtual Machine
tomdale
1
1.1k
EmberCamp London Keynote 2016
tomdale
11
5.4k
Hella Good Ember
tomdale
7
1.3k
EmberConf 2016 Keynote
tomdale
12
2.5k
Introduction to FastBoot - Global Ember Meetup
tomdale
1
230
An Update on FastBoot
tomdale
2
1k
Progressive Enhancement is Dead, Long Live Progressive Enhancement
tomdale
1
1k
Other Decks in Technology
See All in Technology
LLMに渡さなかった仕事
nanaism
0
1.3k
30座EKS, 180次升級淬煉的EKS Upgrade Skill 的歷程
eric8230
0
210
絵ではじめるKubernetesセキュリティ
aoi1
4
690
.NET WebAssemblyで実現するクライアントサイドAI推論:NuGetからViteまで、2つのエコシステムを繋ぐビルド戦略
yamachu
1
430
Vibe Coding で作ったプロダクトをどう安全に動かすか / How to Safely Run Products Built with Vibe Coding
glidenote
0
460
Why Agent Cost Needs Observability
nttcom
0
120
Azure Serverless 2026:Production-ready な AI エージェント基盤 / Azure Serverless 2026: Production-Ready AI Agent Platform
miyake
2
500
白金鉱業Meetup Vol.25 アウトカムが二値のデータに対するCausal Impact
brainpadpr
0
270
時うどん〜Socket.getifaddrsで学ぶネットワーク編 / Tokiudon: The Socket.getifaddrs Edition
coe401_
4
210
AI時代、データエンジニアが一番おもろい
genshun9
0
680
What the customer really needed
kawaguti
PRO
3
220
Issue 駆動でスペシャリストの意図を届ける、AI 実装のアクセシビリティ向上
thkt
0
130
Featured
See All Featured
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
330
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
900
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
340
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
510
Art, The Web, and Tiny UX
lynnandtonic
304
22k
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.3k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.8k
Ten Tips & Tricks for a 🌱 transition
stuffmc
1
230
Google's AI Overviews - The New Search
badams
0
1.6k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
35
2.8k
WCS-LA-2024
lcolladotor
0
830
The agentic SEO stack - context over prompts
schlessera
0
940
Transcript
None
Building Ambitious Web Apps
jQuery
None
Great for manipulating pages. Not so great for building large
apps.
None
None
None
None
You can simulate an application by having the logic run
on the server, and serving a series of pages
None
500ms The problem with this is that your user interface
can only respond as fast as your server—especially bad on flaky 3G connections
Fix this by moving *all* of the logic to the
client. The client has all of the application logic and HTML templates to render in the browser.
{ name: "Christian", occupation: "Engineer" } Instead of sending HTML,
send JSON. Only request data that the client has not yet loaded. Instant response when showing data that has already been fetched.
By decoupling the user interface from the typical HTTP request/
response cycle, you can completely modify how updates are communicated to the client. WebSocket
None
Mobile Cocoa Touch Android SDK Desktop Cocoa .NET Web ?
Mobile Cocoa Touch Android SDK Desktop Cocoa .NET Web
What do client-side frameworks provide?
User Interface Data Persistence Application Architecture
User Interface HTML+CSS Data Persistence ? Application Architecture ?
User Interface HTML+CSS Data Persistence Application Architecture
User Interface View Data Persistence Model Application Architecture Controller
MVC
Enhance JavaScript
Classes Person = Ember.Object.extend({ firstName: null, lastName: null });
Mixins Speaker = Ember.Mixin.create({ hello: function() { var first =
this.get('firstName'), last = this.get('lastName'); alert(first + " " + last + ": HELLO!") } }); Person = Ember.Object.extend(Speaker); Person.create({ firstName: "Yehuda", lastName: "Katz" }).hello();
Mixins Speaker = Ember.Mixin.create({ hello: function() { var first =
this.get('firstName'), last = this.get('lastName'); alert(first + " " + last + ": HELLO!") } }); Person = Ember.Object.extend(Speaker); Person.create({ firstName: "Yehuda", lastName: "Katz" }).hello();
Mixins + super Speaker = Ember.Mixin.create({ hello: function() { var
first = this.get('firstName'), last = this.get('lastName'); return first + " " + last + ": HELLO"; } }); Dog = Ember.Object.extend(Speaker, { hello: function() { return this._super() + " THIS IS DOG"; } }); var phil = Dog.create({ firstName: "Budweiser", lastName: "Phil", hello: function() { return this._super() + " ZAAAAAAAA"; } }); alert(phil.hello());
Computed Properties Person = Ember.Object.extend({ fullName: function() { return this.get('firstName')
+ ' ' + this.get('lastName'); }.property('firstName', 'lastName') }); var yehuda = Person.create({ firstName: "Yehuda", lastName: "Katz" }); alert(yehuda.get('fullName'));
Uniform Access
“ Bertrand Meyer Uniform Access All services offered by a
module should be available through a uniform notation, which does not betray whether they are implemented through storage or through computation.
Namespaces >> Core = Ember.Namespace.create(); >> Core.Person = Ember.Person.extend(); >>
Core.Person.toString(); => Core.Person >> Core.Person.create().toString(); => <Core.Person:ember157> No more [object Object]!
Names in Conventions App.Post = DS.Model.extend({ title: DS.attr('string'), body: DS.attr('string')
}); // vs. App.Post = DS.Model.extend({ collectionURL: "/posts", singleURL: "/post", title: DS.attr('string'), body: DS.attr('string') });
Application Structure
Model View Controller
Model View Controller Router
Router •ORMs model persistent state as objects •The router models
application state as objects •Maps the browser‘s URL to app state
Router Private Blog Not Logged In Logged In Index Show
Post Edit Post
Router Private Blog Not Logged In Logged In Index Show
Post Edit Post
Router Private Blog Not Logged In Logged In Index Show
Post Edit Post /login
Router /posts Private Blog Not Logged In Logged In Index
Show Post Edit Post
Router /post/123 Private Blog Not Logged In Logged In Index
Show Post Edit Post
Advantages •Never be in an unknown state •Find errors faster
•Create a map of user actions
TypeError: Cannot call method 'showPhoto' of undefined
Entered state "notLoggedIn" Sent event "enterCredentials" Entered state "loggedIn" Entered
state "loggedIn.index" Sent event "showPost" Entered state "loggedIn.showPost" Could not respond to event "editPost" in state "loggedIn.showPost"
Why Ember?
Ember is not a throwaway weekend project or a corporate-sponsored
project. It is built by and for the Ember community, an open source project first and only.
100% Open Source Built by the Community Ember is not
a throwaway weekend project or a corporate-sponsored project. It is built by and for the Ember community, an open source project first and only.
•Manages complexity •MIT-licensed •More productive •Aggressively rolls in best practices
•Built for the long haul
As patterns solidify, we roll them in.
Sometimes we give them a little push.
Thank you. Questions? http://plus.tomdale.net http://emberjs.com