Download - Ember data

Transcript
Page 1: Ember data

Ember data:The coolest construction zone in JS today

By: Jason Cox & Javon Harper@jasocox@javonharper

ShareMySpace.com

Page 2: Ember data

Introduction

Page 3: Ember data

What is Ember Data?

Automagic everything!

● Persistence/Retrieval

● Updating UI (no event handling/triggering!)

● Relationships

Page 4: Ember data

Why are we using it?

● Because we are using ember.js

● It's new, shiny, and fun!

● It's saved a lot of time with writing code (mostly)

● Fewer lines of code == fewer bugs

Page 5: Ember data

Defining Models

Page 6: Ember data

Getting Started

Make your model filejavascripts/models/user.js

App.User = DS.Model.extend({// Stuff goes here

});

Page 7: Ember data

Types

App.User = DS.Model.extend({firstName: DS.attr(‘string’),lastName: DS.attr(‘string’)

});

Type: string, number, boolean, and date

Page 8: Ember data

Calculated Fields/Methods

App.User = DS.Model.extend({firstName: DS.attr(‘string’),lastName: DS.attr(‘string’),

fullName: function() { return this.get('firstName') + ' ' + this.get('lastName');}.property('firstName', 'lastName')

});

Page 9: Ember data

Relationships

App.User = DS.Model.extend({firstName: DS.attr(‘string’),lastName: DS.attr(‘string’),

fullName: function() { return this.get('firstName') + ' ' + this.get('lastName');}.property('firstName', 'lastName'),

profile: DS.belongsTo(‘App.Profile’),favorites: DS.hasMany(‘App.Beer’)

});

Page 10: Ember data

Code samplehttps://github.com/nicholaides/ember-sample-app

Page 11: Ember data

REST Adapter

Page 12: Ember data

What is it?

● Used by Ember Data for all loading and storing

● Allows several customizations (more following)

● Could write your own (e.g., for XML or RESTlike)

Page 13: Ember data

Retrieving Your Data

var firstPost = App.Post.find(1);

var posts = App.Post.find();

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

Page 14: Ember data

var transaction = this.get('store').transaction();

transaction.add(user);

user.set('age', 100);

transaction.commit();

Updating Your Data

Page 15: Ember data

● Pluralization (i.e., person: people)

● Endpoint Path

● Host

● Transformations (more following)

Adapter Configurations

Page 16: Ember data

Transformations

When string, number, boolean, and date aren't enough.

DS.RESTAdapter.registerTransform('coordinatePoint', { serialize: function(value) { return [value.get('x'), value.get('y')]; }, deserialize: function(value) { return Ember.create({ x: value[0], y: value[1] }); }});

App.Cursor = DS.Model.extend({ position: DS.attr('coordinatePoint')});

Page 17: Ember data

Adapter Conveniences

● Sideloading, or embedding associations

● Identity map (ember data)

● "Everything in Ember.js is bindings-aware"

Page 18: Ember data

Model Lifecycle

Page 19: Ember data

States & Events

● Offers a handful of flags to express state

● isLoaded, isDirty, isValid + more

● Provides helpful events

● didCreate, didUpdate, didDelete,

becameError, didLoad + more

Page 20: Ember data

Examples

<div {{ bindAttr class=”beer.isDirty:modified”}}>

beer.on(‘becameError’, function() {invokeBlindRage();

});

Page 21: Ember data

Code samplehttps://github.com/javonharper/ember-sample-app

Page 22: Ember data

Other Frameworks

Page 23: Ember data

Gotchas

Page 24: Ember data

Questions & Answers

Page 25: Ember data

Links

http://emberjs.com/guides/models/http://discuss.emberjs.com/https://github.com/emberjs/datahttp://stackoverflow.com/questions/tagged/ember.js


Top Related