Ember background basics

46
Basics for Ember.js An introduction and some history

description

http://github.com/sideshowcoder/javascript-workshop

Transcript of Ember background basics

Page 1: Ember background basics

Basics for Ember.js

An introduction and some history

Page 2: Ember background basics

Stuck? Here are some resources…

• https://developer.mozilla.org/en-US/

• http://underscorejs.org

• http://pivotal.github.io/jasmine/

• http://www.2ality.com/2013/06/basic-javascript.html

• http://www.2ality.com/2013/07/meta-style-guide.html

Page 3: Ember background basics

Getting better…

• http://exercism.io/

• Read Code:

• https://github.com/jashkenas/underscore/blob/master/underscore.js

• https://github.com/jashkenas/backbone/blob/master/backbone.js

• https://github.com/emberjs/ember.js/tree/master/packages

Page 4: Ember background basics

Some small things first

Page 5: Ember background basics

function.bind

Page 6: Ember background basics

function foo(bar) { console.log(bar) return bar } !var f = foo.bind(null, "hello world") console.log(typeof f) // function f() // outputs hello world

Page 7: Ember background basics

Passing functions around

Page 8: Ember background basics

function Ork() { this.description = "I am an Ork" } !Ork.prototype.describe = function() { console.log(this.description) } !var ork = new Ork() ork.describe() // I am an Ork !setTimeout(ork.describe, 100) // undefined setTimeout(ork.describe.bind(ork), 100) // I am an Ork

Page 9: Ember background basics

MVC != MVC

Page 10: Ember background basics

Server-side MVC is not the only way!

Page 11: Ember background basics

Rails MVC

Page 12: Ember background basics

Observers

Page 13: Ember background basics

Embers MVC relies on Observers

Page 14: Ember background basics

Observers are a central part to MVC here

Page 15: Ember background basics

So what is the observer pattern?

Page 16: Ember background basics

http://addyosmani.com/resources/essentialjsdesignpatterns/book/

Page 17: Ember background basics

“The observer pattern is a software design pattern in which an object, called the subject, maintains a list of its dependents, called observers, and notifies them automatically of any state changes, usually by calling one of their methods.” — Wikipedia

Page 18: Ember background basics

Observable

functions Ork(name) { this.name = name this._observers = [] } !Ork.prototype.smash = function(thing) { this._observers.forEach(function(o) { o.notify(this, "smashed " + thing); }, this) } !Ork.prototype.registerObserver = function(observer) { this._observers.push(observer) }

Page 19: Ember background basics

Observer

function OrkMaster(name) { this.name = name } !OrkMaster.prototype.notify = function(ork, message) { console.log(this.name + " here " + ork.name + " told me he " + message) } !OrkMaster.prototype.observe = function(ork) { ork.registerObserver(this) }

Page 20: Ember background basics

Putting it all together

var master = new OrkMaster("Uruk-hai") var gobgrub = new Ork("Gobgrub") var nazsnaga = new Ork("Nazsnaga") !master.observe(gobgrub) master.observe(nazsnaga) !gobgrub.smash("human") nazsnaga.smash("drawf") !// Uruk-hai here Gobgrub told me he smashed human // Uruk-hai here Nazsnaga told me he smashed drawf

Page 21: Ember background basics

http://jsfiddle.net/sideshowcoder/fRDDL/

Page 22: Ember background basics

JavaScript already offers this via events

Page 23: Ember background basics

Evented Observerable

function Ork(name) { this.name = name var _e = document.createElement("div") this.dispatchEvent = _e.dispatchEvent.bind(_e) this.addEventListener = _e.addEventListener.bind(_e) } !Ork.prototype.smash = function(thing) { var evData = { message: "smashed " + thing, ork: this } var ev = new CustomEvent("orkevent", { detail: evData }) this.dispatchEvent(ev) }

Page 24: Ember background basics

Evented Observerfunction OrkMaster(name) { this.name = name } !OrkMaster.prototype.handleEvent = function(ev) { var ork = ev.detail.ork var message = ev.detail.message console.log(this.name + " here " + ork.name + " told me he " + message) } !OrkMaster.prototype.observe = function(ork) { var handler = this.handleEvent.bind(this) ork.addEventListener("orkevent", handler) }

Page 25: Ember background basics

http://jsfiddle.net/sideshowcoder/5cPAg/

Page 26: Ember background basics

Why do all this?

Page 27: Ember background basics

Decoupling

Page 28: Ember background basics

Automatic updates, or Data Binding

Page 29: Ember background basics

function Ork() { this._observers = [] } ! Ork.prototype.setName = function(name) { this.name = name this._observers.forEach(function(o) { o.notify(this) }, this) } ! Ork.prototype.addObserver = function(observer) { this._observers.push(observer) } ! var nameObserver = { notify: function(ork) { document.getElementById("ork-name").innerHTML = ork.name } } ! var ork = new Ork() ork.addObserver(nameObserver) ! ork.setName("Bar") ! setTimeout(function() { ork.setName("Gobgrub") }, 1000)

Page 30: Ember background basics

http://jsfiddle.net/sideshowcoder/GLfbn/

Page 31: Ember background basics

http://jsfiddle.net/sideshowcoder/J2Cn6/

Page 32: Ember background basics

Only the model is the source for data

Page 33: Ember background basics

There is not “It’s over after the request is done”

Page 34: Ember background basics

The Run Loop

Page 35: Ember background basics

Ember.run

Page 36: Ember background basics

“…is a programming construct that waits for and dispatches events or messages in a program” !

Thanks Wikipedia!

Page 37: Ember background basics

https://machty.s3.amazonaws.com/ember-run-loop-visual/index.html

Page 38: Ember background basics

Why in Ember?

Page 39: Ember background basics

Ember needs some boundaries!

Page 40: Ember background basics

Model layer is “THE TRUTH”™

Page 41: Ember background basics

Performance

Page 42: Ember background basics

MVCs all the way down

Page 43: Ember background basics

The Routes / Router are the “Grand Daddy”

Page 44: Ember background basics

Ember did not invent this

Page 45: Ember background basics

Ember ~ Sproutcore ~ Cocoa

Page 46: Ember background basics

If you want to understand Ember look at Cocoa !And listen to Yehuda Katz… !http://www.youtube.com/watch?v=s1dhXamEAKQ !