51
Stop! Ember Time! Wednesday, 9 October 13

Stop Ember Time

  • View
    1.219

  • Download
    0

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Stop Ember Time

Stop! Ember Time!

Wednesday, 9 October 13

Page 2: Stop Ember Time

Carl Woodward

Wednesday, 9 October 13

Page 3: Stop Ember Time

@cjwoodward

Wednesday, 9 October 13

Page 4: Stop Ember Time

Wednesday, 9 October 13

Page 5: Stop Ember Time

Wednesday, 9 October 13

Page 6: Stop Ember Time

Why Ember?

Wednesday, 9 October 13

Page 7: Stop Ember Time

Wednesday, 9 October 13

Page 8: Stop Ember Time

Well structured

Wednesday, 9 October 13

Page 9: Stop Ember Time

Data bound

Wednesday, 9 October 13

Page 10: Stop Ember Time

Fast

Wednesday, 9 October 13

Page 11: Stop Ember Time

Javascript MVC framework

Wednesday, 9 October 13

Page 12: Stop Ember Time

Wednesday, 9 October 13

Page 13: Stop Ember Time

Route

Model

ControllerView

Template

User

Wednesday, 9 October 13

Page 14: Stop Ember Time

Route

Router

Find a model

Before model

Wednesday, 9 October 13

Page 15: Stop Ember Time

WeightsProgram.ExerciseRoute  =  Ember.Route.extend    model:  (params)  -­‐>        WeightsProgram.Exercise.find  params["exercise_id"]

* Using Ember Model

Wednesday, 9 October 13

Page 16: Stop Ember Time

Controller

Route

Actions from UI

Wednesday, 9 October 13

Page 17: Stop Ember Time

WeightsProgram.AuthenticatedExerciseController  =  Ember.ObjectController.extend    actions:        saveReps:  -­‐>            @get("content").set("current_max",  @get("content").get("new_max"))            @get("content").save()            @transitionToRoute("authenticated.week",  @get("content.week"))

* Using Ember Model

Wednesday, 9 October 13

Page 18: Stop Ember Time

View

Controller

Element eventsdidInsertElement

Wednesday, 9 October 13

Page 19: Stop Ember Time

WeightsProgram.AuthenticatedWeekView  =  Ember.View.extend()

Wednesday, 9 October 13

Page 20: Stop Ember Time

Template

View

{{#link-to “week” week}}Week Link{{/link-to}}

<form {{action "saveReps" on="submit"}}>

<h3>{{movement.name}}</h3>

Wednesday, 9 October 13

Page 21: Stop Ember Time

Templating

Wednesday, 9 October 13

Page 22: Stop Ember Time

Handlebarsor

Emblem

Wednesday, 9 October 13

Page 23: Stop Ember Time

if  isEditing    form.post-­‐form  role="form"  submit="create"        .form-­‐group            button.btn.btn-­‐primary  click="stopEditing"  View

Emblem

Wednesday, 9 October 13

Page 24: Stop Ember Time

<h2>Week  {{number}}</h2>

<div  class="menu">    {{#each  exercise  in  exercises}}        <h3>            {{#link-­‐to  "authenticated.exercise"  exercise}}                {{exercise.movement.name}}            {{/link-­‐to}}        </h3>    {{/each}}</div>

Handlebars

Wednesday, 9 October 13

Page 25: Stop Ember Time

Application layout

Wednesday, 9 October 13

Page 26: Stop Ember Time

<div  class="container  work">    <div  class="row">        <div  class="col-­‐sm-­‐12">            <h1>Strength  Program</h1>        </div>    </div>    <div  class="row">        <div  class="col-­‐sm-­‐12">            {{  outlet  }}        </div>    </div></div>

Handlebars

Wednesday, 9 October 13

Page 27: Stop Ember Time

outlet is like yield in rails views

{{outlet}}

Wednesday, 9 October 13

Page 28: Stop Ember Time

Persistence

Wednesday, 9 October 13

Page 29: Stop Ember Time

Ember Dataor

Ember Model

Wednesday, 9 October 13

Page 30: Stop Ember Time

Ember Model = customisable

Wednesday, 9 October 13

Page 31: Stop Ember Time

Wednesday, 9 October 13

Page 32: Stop Ember Time

WeightsProgram.Exercise  =  Ember.Model.extend    id:  Ember.attr()    reps:  Ember.attr()    initial_max_value:  Ember.attr()    movement:  Ember.belongsTo("WeightsProgram.Movement",  key:  "movement_id",  embedded:  false)    accessories:  Ember.hasMany("WeightsProgram.Accessory",  key:  "accessory_ids",  embedded:  false)

WeightsProgram.Exercise.url  =  "/exercises"WeightsProgram.Exercise.adapter  =  Ember.RESTAdapter.create()WeightsProgram.Exercise.rootKey  =  "exercise"WeightsProgram.Exercise.collectionKey  =  "exercises"

Ember Model

Wednesday, 9 October 13

Page 33: Stop Ember Time

EmberBlog.Post  =  DS.Model.extend    title:  DS.attr("string")    publishedOn:  DS.attr("string")    body:  DS.attr("string")

Ember Data

Wednesday, 9 October 13

Page 34: Stop Ember Time

JJ Abrams

Wednesday, 9 October 13

Page 35: Stop Ember Time

Tips

Wednesday, 9 October 13

Page 36: Stop Ember Time

Don’t try and preload associations

Wednesday, 9 October 13

Page 37: Stop Ember Time

didInsertView

Wednesday, 9 October 13

Page 38: Stop Ember Time

model.on(“didCreateRecord”)

Wednesday, 9 October 13

Page 39: Stop Ember Time

WeightsProgram.AuthenticatedProgramController  =  Ember.ObjectController.extend    actions:        createWeek:  -­‐>            number  =  @get("weeks.lastObject.number")  +  1            week  =  WeightsProgram.Week.create  program_id:  @get("id"),  number:  number            week.on  "didCreateRecord",  =>                @get("model").reload()                @transitionToRoute("authenticated.program",  @get("model"))            week.save()

Ember Model

Wednesday, 9 October 13

Page 40: Stop Ember Time

Computed Properties

Wednesday, 9 October 13

Page 41: Stop Ember Time

Wednesday, 9 October 13

Page 42: Stop Ember Time

increase_percentage:  (-­‐>    @get("current_max")  /  @get("previous_max"))  -­‐  1).property("current_max",  "previous_max")

Wednesday, 9 October 13

Page 43: Stop Ember Time

Include any attribute you need to create the model.

E.g. program_id

Wednesday, 9 October 13

Page 44: Stop Ember Time

Nested routes require nested names

Wednesday, 9 October 13

Page 45: Stop Ember Time

WeightsProgram.AuthenticatedProgramController

WeightsProgram.Router.map  -­‐>    @resource  "authenticated",  path:  "/",  -­‐>        @route  "program",  path:  "/programs/:program_id"

WeightsProgram.AuthenticatedProgramView

app/assets/javascripts/views/authenticated/program.hbs

Wednesday, 9 October 13

Page 46: Stop Ember Time

Only use nested resources with nested outlets

Wednesday, 9 October 13

Page 47: Stop Ember Time

Wednesday, 9 October 13

Page 48: Stop Ember Time

ember-rails works really well

Wednesday, 9 October 13

Page 49: Stop Ember Time

jsbin

Wednesday, 9 October 13

Page 50: Stop Ember Time

discuss.emberjs.com

Read  discourse  source  code

#emberjs-­‐dev

Wednesday, 9 October 13

Page 51: Stop Ember Time

Demo

Wednesday, 9 October 13