36
Spiel, Spaß, Spannung mit ember js

Spiel, Spaß, Spannung mit ember js€¦ · ember js l Conventionoverconfiguration l Kein lästiger Boilerplate-code l Templatebasiert(handlebar) l Basierend auf Sproutcore 4|Spiel,

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Spiel, Spaß, Spannung mit ember js€¦ · ember js l Conventionoverconfiguration l Kein lästiger Boilerplate-code l Templatebasiert(handlebar) l Basierend auf Sproutcore 4|Spiel,

Spiel, Spaß, Spannung mit ember js

Page 2: Spiel, Spaß, Spannung mit ember js€¦ · ember js l Conventionoverconfiguration l Kein lästiger Boilerplate-code l Templatebasiert(handlebar) l Basierend auf Sproutcore 4|Spiel,

Spiel, Spaß, Spannung mit ember js

Page 3: Spiel, Spaß, Spannung mit ember js€¦ · ember js l Conventionoverconfiguration l Kein lästiger Boilerplate-code l Templatebasiert(handlebar) l Basierend auf Sproutcore 4|Spiel,

Spiel, Spaß, Spannung mit ember js3 |

ember js

A framework for creatingambitious web applications

Page 4: Spiel, Spaß, Spannung mit ember js€¦ · ember js l Conventionoverconfiguration l Kein lästiger Boilerplate-code l Templatebasiert(handlebar) l Basierend auf Sproutcore 4|Spiel,

ember js

l Convention over configuration

l Kein lästiger Boilerplate-code

l Templatebasiert (handlebar)

l Basierend auf Sproutcore

Spiel, Spaß, Spannung mit ember js4 |

Page 5: Spiel, Spaß, Spannung mit ember js€¦ · ember js l Conventionoverconfiguration l Kein lästiger Boilerplate-code l Templatebasiert(handlebar) l Basierend auf Sproutcore 4|Spiel,

Hello world

Spiel, Spaß, Spannung mit ember js5 |

Hello

world

!

Page 6: Spiel, Spaß, Spannung mit ember js€¦ · ember js l Conventionoverconfiguration l Kein lästiger Boilerplate-code l Templatebasiert(handlebar) l Basierend auf Sproutcore 4|Spiel,

Spiel, Spaß, Spannung mit ember js6 |

Templating

Page 7: Spiel, Spaß, Spannung mit ember js€¦ · ember js l Conventionoverconfiguration l Kein lästiger Boilerplate-code l Templatebasiert(handlebar) l Basierend auf Sproutcore 4|Spiel,

ember

Spiel, Spaß, Spannung mit ember js7 |

M-V-

C

Page 8: Spiel, Spaß, Spannung mit ember js€¦ · ember js l Conventionoverconfiguration l Kein lästiger Boilerplate-code l Templatebasiert(handlebar) l Basierend auf Sproutcore 4|Spiel,

ember

Spiel, Spaß, Spannung mit ember js8 |

Page 9: Spiel, Spaß, Spannung mit ember js€¦ · ember js l Conventionoverconfiguration l Kein lästiger Boilerplate-code l Templatebasiert(handlebar) l Basierend auf Sproutcore 4|Spiel,

model… view… controller…

Spiel, Spaß, Spannung mit ember js9 |

App. Person = DS.Model.extend({firstName : DS.attr('string'),lastName : DS.attr('string'),birthday : DS.attr('date'),

fullName : function() {return this.get('firstName') + ' ' + this.get('last Name');

}.property('firstName', 'lastName')});

Page 10: Spiel, Spaß, Spannung mit ember js€¦ · ember js l Conventionoverconfiguration l Kein lästiger Boilerplate-code l Templatebasiert(handlebar) l Basierend auf Sproutcore 4|Spiel,

model… view… controller…

Spiel, Spaß, Spannung mit ember js10 |

one-to-many:

App. Post = DS.Model.extend({comments: DS. hasMany ('App. Comment')

});

App. Comment = DS.Model.extend({post: DS. belongsTo ('App. Post ')

});

Page 11: Spiel, Spaß, Spannung mit ember js€¦ · ember js l Conventionoverconfiguration l Kein lästiger Boilerplate-code l Templatebasiert(handlebar) l Basierend auf Sproutcore 4|Spiel,

model… view… controller…

Spiel, Spaß, Spannung mit ember js11 |

var persons = App.Person. find ();

var peter = App.Person. find ({ name: "Peter" });

peter. set (‘lastName', “Gabriel");

peter. incrementProperty ('age');

Page 12: Spiel, Spaß, Spannung mit ember js€¦ · ember js l Conventionoverconfiguration l Kein lästiger Boilerplate-code l Templatebasiert(handlebar) l Basierend auf Sproutcore 4|Spiel,

Spiel, Spaß, Spannung mit ember js12 |

model… view… controller…

Page 13: Spiel, Spaß, Spannung mit ember js€¦ · ember js l Conventionoverconfiguration l Kein lästiger Boilerplate-code l Templatebasiert(handlebar) l Basierend auf Sproutcore 4|Spiel,

model… view… controller…

Spiel, Spaß, Spannung mit ember js13 |

<html><head>

<script type=" text/x-handlebars " data-template-name =" say-hello ">

Hello, <b >{{view.name}} </b></script>

</head></html>

Page 14: Spiel, Spaß, Spannung mit ember js€¦ · ember js l Conventionoverconfiguration l Kein lästiger Boilerplate-code l Templatebasiert(handlebar) l Basierend auf Sproutcore 4|Spiel,

model… view… controller…

Spiel, Spaß, Spannung mit ember js14 |

<html><head>

<script type=" text/x-handlebars " data-template-name =" say-hello ">

Hello, <b >{{view.name}} </b></script>

</head></html>

var view = Ember.View.create({templateName : ' say-hello ',name: "Bob"

});

Page 15: Spiel, Spaß, Spannung mit ember js€¦ · ember js l Conventionoverconfiguration l Kein lästiger Boilerplate-code l Templatebasiert(handlebar) l Basierend auf Sproutcore 4|Spiel,

model… view… controller…

Spiel, Spaß, Spannung mit ember js15 |

{{#view App.ClickableView}}This is a clickable area!

{{/view}}

App. ClickableView = Ember.View.extend({click : function(evt) {

alert("ClickableView was clicked!");}

});

Page 16: Spiel, Spaß, Spannung mit ember js€¦ · ember js l Conventionoverconfiguration l Kein lästiger Boilerplate-code l Templatebasiert(handlebar) l Basierend auf Sproutcore 4|Spiel,

model… view… controller…

Spiel, Spaß, Spannung mit ember js16 |

Properties

dekoriert

Page 17: Spiel, Spaß, Spannung mit ember js€¦ · ember js l Conventionoverconfiguration l Kein lästiger Boilerplate-code l Templatebasiert(handlebar) l Basierend auf Sproutcore 4|Spiel,

model… view… controller…

Spiel, Spaß, Spannung mit ember js17 |

Properties

dekoriert

Application Properties- transiente Zustandsinformationen- applikationsbezogen

- z.B. expandStatus eines Bereiches

Page 18: Spiel, Spaß, Spannung mit ember js€¦ · ember js l Conventionoverconfiguration l Kein lästiger Boilerplate-code l Templatebasiert(handlebar) l Basierend auf Sproutcore 4|Spiel,

model… view… controller…

Spiel, Spaß, Spannung mit ember js18 |

App. SongController = Ember. ObjectController .extend({soundVolume : 1

});

Page 19: Spiel, Spaß, Spannung mit ember js€¦ · ember js l Conventionoverconfiguration l Kein lästiger Boilerplate-code l Templatebasiert(handlebar) l Basierend auf Sproutcore 4|Spiel,

App. SongsController = Ember. ArrayController .extend({longSongCount : function() {

var longSongs = this. filter (function(song) {return song.get( 'duration ') > 30;

});return longSongs.get('length');

}.property('@each.duration')});

model… view… controller…

Spiel, Spaß, Spannung mit ember js19 |

App. SongController = Ember. ObjectController .extend({soundVolume : 1

});

Page 20: Spiel, Spaß, Spannung mit ember js€¦ · ember js l Conventionoverconfiguration l Kein lästiger Boilerplate-code l Templatebasiert(handlebar) l Basierend auf Sproutcore 4|Spiel,

routing

Spiel, Spaß, Spannung mit ember js20 |

Page 21: Spiel, Spaß, Spannung mit ember js€¦ · ember js l Conventionoverconfiguration l Kein lästiger Boilerplate-code l Templatebasiert(handlebar) l Basierend auf Sproutcore 4|Spiel,

routing

Spiel, Spaß, Spannung mit ember js21 |

App. Router .map(function() {this. route (" about ", { path: "/about" });this. route (" favorites ", { path: "/favs" });

});

Page 22: Spiel, Spaß, Spannung mit ember js€¦ · ember js l Conventionoverconfiguration l Kein lästiger Boilerplate-code l Templatebasiert(handlebar) l Basierend auf Sproutcore 4|Spiel,

routing

Spiel, Spaß, Spannung mit ember js22 |

App. Router .map(function() {this. route (" about ", { path: "/about" });this. route (" favorites ", { path: "/favs" });

});

Template: about

Controller: aboutController

Route: aboutRoute

URL: /about

Page 23: Spiel, Spaß, Spannung mit ember js€¦ · ember js l Conventionoverconfiguration l Kein lästiger Boilerplate-code l Templatebasiert(handlebar) l Basierend auf Sproutcore 4|Spiel,

Spiel, Spaß, Spannung mit ember js23 |

object model

Page 24: Spiel, Spaß, Spannung mit ember js€¦ · ember js l Conventionoverconfiguration l Kein lästiger Boilerplate-code l Templatebasiert(handlebar) l Basierend auf Sproutcore 4|Spiel,

object model

Spiel, Spaß, Spannung mit ember js24 |

App. Person = Ember. Object.extend ({say : function(thing) {

var name = this.get('name');alert(name + " says: " + thing);

}});

Page 25: Spiel, Spaß, Spannung mit ember js€¦ · ember js l Conventionoverconfiguration l Kein lästiger Boilerplate-code l Templatebasiert(handlebar) l Basierend auf Sproutcore 4|Spiel,

object model

Spiel, Spaß, Spannung mit ember js25 |

App. Person = Ember. Object.extend ({say : function(thing) {

var name = this.get('name');alert(name + " says: " + thing);

}});

Simon says: Hi!

Page 26: Spiel, Spaß, Spannung mit ember js€¦ · ember js l Conventionoverconfiguration l Kein lästiger Boilerplate-code l Templatebasiert(handlebar) l Basierend auf Sproutcore 4|Spiel,

object model

Spiel, Spaß, Spannung mit ember js26 |

App. Person = Ember. Object.extend ({say : function(thing) {

var name = this.get('name');alert(name + " says: " + thing);

}});

App. NicePerson = App. Person.extend ({say : function(thing) {

this._super (thing + ", nice to meet you"); }

});

Page 27: Spiel, Spaß, Spannung mit ember js€¦ · ember js l Conventionoverconfiguration l Kein lästiger Boilerplate-code l Templatebasiert(handlebar) l Basierend auf Sproutcore 4|Spiel,

object model

Spiel, Spaß, Spannung mit ember js27 |

App. Person = Ember. Object.extend ({say : function(thing) {

var name = this.get('name');alert(name + " says: " + thing);

}});

App. NicePerson = App. Person.extend ({say : function(thing) {

this._super (thing + ", nice to meet you"); }

});

Simon says: Hi, niceto meet you!

Page 28: Spiel, Spaß, Spannung mit ember js€¦ · ember js l Conventionoverconfiguration l Kein lästiger Boilerplate-code l Templatebasiert(handlebar) l Basierend auf Sproutcore 4|Spiel,

object model

Spiel, Spaß, Spannung mit ember js28 |

Person = Ember.Object.extend({firstName: null,lastName: null,

fullName : function() {var firstName = this.get('firstName');var lastName = this.get('lastName');

return firstName + ' ' + lastName;}. property ( 'firstName ', 'lastName ')

});

var tom = Person.create({firstName: "Tom",lastName: "Dale"

});

tom.get('fullName') // "Tom Dale"

Page 29: Spiel, Spaß, Spannung mit ember js€¦ · ember js l Conventionoverconfiguration l Kein lästiger Boilerplate-code l Templatebasiert(handlebar) l Basierend auf Sproutcore 4|Spiel,

object model

Spiel, Spaß, Spannung mit ember js29 |

Do you rememberArrayController…?

App. SongsController = Ember.ArrayController.extend({longSongCount : function() {

var longSongs = this.filter(function(song) {return song.get('duration') > 30;

});return longSongs.get('length');

}. property('@each.duration')});

Page 30: Spiel, Spaß, Spannung mit ember js€¦ · ember js l Conventionoverconfiguration l Kein lästiger Boilerplate-code l Templatebasiert(handlebar) l Basierend auf Sproutcore 4|Spiel,

object model

Spiel, Spaß, Spannung mit ember js30 |

Observer

person. addObserver ('fullName', function() {// deal with the change

});

person.set('firstName', "Peter");

App. DefWeek = Ember.Object.create({when: '24-27. Juni'

});

App. WebDefConf = Ember.Object.create({whenBinding : 'App.DefWeek.when'

});

Binding

Page 31: Spiel, Spaß, Spannung mit ember js€¦ · ember js l Conventionoverconfiguration l Kein lästiger Boilerplate-code l Templatebasiert(handlebar) l Basierend auf Sproutcore 4|Spiel,

ember data

Spiel, Spaß, Spannung mit ember js31 |

• Lädt Daten aus der Persistenz / JSON

• Zentraler DataStore für die Anwendung• DS.Model.extend()• save()

• Adapter zur Anbindung• REST• Basic• …

� https://github.com/emberjs/data

Page 32: Spiel, Spaß, Spannung mit ember js€¦ · ember js l Conventionoverconfiguration l Kein lästiger Boilerplate-code l Templatebasiert(handlebar) l Basierend auf Sproutcore 4|Spiel,

handlebars

Spiel, Spaß, Spannung mit ember js32 |

� http://handlebarsjs.com/� https://github.com/wycats/handlebars.js/

• expressions

• {{name}}

• block expressions

• {{#list people}} {{name}}{{/list}}

• paths

• {{author.name}}

• helpers

• with: {{#with author}}

• each: {{#each people}}

• …

Page 33: Spiel, Spaß, Spannung mit ember js€¦ · ember js l Conventionoverconfiguration l Kein lästiger Boilerplate-code l Templatebasiert(handlebar) l Basierend auf Sproutcore 4|Spiel,

Spiel, Spaß, Spannung mit ember js33 |

Pitfalls

Page 34: Spiel, Spaß, Spannung mit ember js€¦ · ember js l Conventionoverconfiguration l Kein lästiger Boilerplate-code l Templatebasiert(handlebar) l Basierend auf Sproutcore 4|Spiel,

l Fehler im handlebar-templating schwer nachvollziehbar

l Dokumentation

l noch keine Finale 1.0

l viel Doku und Beispiele zu Version 0.9.x -> API breaks

l ember data noch in einem sehr frühen Stadium

Spiel, Spaß, Spannung mit ember js34 |

Pitfalls

Page 35: Spiel, Spaß, Spannung mit ember js€¦ · ember js l Conventionoverconfiguration l Kein lästiger Boilerplate-code l Templatebasiert(handlebar) l Basierend auf Sproutcore 4|Spiel,

Spiel, Spaß, Spannung mit ember js35 |

but it‘s worth trying!

Page 36: Spiel, Spaß, Spannung mit ember js€¦ · ember js l Conventionoverconfiguration l Kein lästiger Boilerplate-code l Templatebasiert(handlebar) l Basierend auf Sproutcore 4|Spiel,

Spiel, Spaß, Spannung mit ember js36 |

Vielen Dank

eXXcellent solutions GmbHBeim Alten Fritz 2

89075 Ulm

http://[email protected]

Bildquellen:http://www.sxc.hu/

Ben EarwickerGarrison Photography, Boise, IDwww.garrisonphoto.org