Slide 1

Slide 1 text

Oredev 2013 Nov 2013 Building Web Apps with Ember.js Wednesday, November 6, 13

Slide 2

Slide 2 text

@jdcravens github.com/jessecravens @thomasqbrady github.com/thomasqbrady frog Wednesday, November 6, 13

Slide 3

Slide 3 text

Oredev 2013 HTML5 Hacks 3 Sign up on the Mailing List Win A Free eBook at html5hacks.com Wednesday, November 6, 13

Slide 4

Slide 4 text

Getting Started The Ember Community Wednesday, November 6, 13

Slide 5

Slide 5 text

Oredev 2013 A Great Starting Point for Beginners, but then what is next? Tom Dale’s Bloggr-Client Wednesday, November 6, 13

Slide 6

Slide 6 text

Oredev 2013 Ember Guides, Ember API Docs Ember Community Docs Wednesday, November 6, 13

Slide 7

Slide 7 text

RocknRollCall Master/Detail and more... Wednesday, November 6, 13

Slide 8

Slide 8 text

Oredev 2013 4 repos of varying levels of depth into the application stack Github/EmberjsBook Wednesday, November 6, 13

Slide 9

Slide 9 text

Oredev 2013 Ember Tools Ember Inspector Ember Boilerplates App Initializers Promises Needs Ember Components 3rd Party Integration (jQuery, D3) Ember-Testing SPA Authentication Ember-Data Remote Data Storage RocknRollCall vs. Bloggr-Client Wednesday, November 6, 13

Slide 10

Slide 10 text

Oredev 2013 First, Early Design: HTML, Diagram Controllers URL Driven: State Manager and Routes First Populate the Controllers with Dummy Data Models, Fixtures, FixtureAdapter || LocalStorageAdapter Then, Build Server-Side Routes/Endpoints Serialization and Formatting JSON Remote Data Store and DB Sync Building Modern Web Apps Work front to back helps stay efficient, avoiding rewriting code One of the hardest aspects to grasp is an efficient order Work front to back helps stay efficient, avoiding rewriting code Create the Backbone and States of the Application By using Dummy data, you are able to organize the Apps Routes/Controllers Wednesday, November 6, 13

Slide 11

Slide 11 text

Ember Basics The Minimal Viable App (Chapter 2) Wednesday, November 6, 13

Slide 12

Slide 12 text

Oredev 2013 Dummy Data Binding Handlebars View helper How the app loads Minimal Viable App Wednesday, November 6, 13

Slide 13

Slide 13 text

RocknRollCall Requirements and Early Design Wednesday, November 6, 13

Slide 14

Slide 14 text

Oredev 2013 Search by Keyword to Find Transient Data (Songs and Artists) Persist the Activity of Selecting Songs and Artists into LocalStorage Display Detail information to the User Show a Visualization of the ‘Hotness’ of your Searches RockNRollCall Req’s Wednesday, November 6, 13

Slide 15

Slide 15 text

Oredev 2013 Application Route, application.hbs, view App.SearchBox Transitions to the SearchResultsRoute passing the query Calls the searchByName(), searchByTitle on Artists/Songs Controllers Populates the artists, songs arrays on the SearchResultsController In search-results template iterate over those arrays Click on takes the User to the Detail page RockNRollCall Flow Wednesday, November 6, 13

Slide 16

Slide 16 text

Oredev 2013 Building Modern Web Apps Application Route application.hbs App.SearchBox View Loading Route Wednesday, November 6, 13

Slide 17

Slide 17 text

Oredev 2013 Building Modern Web Apps SearchResults Route SearchResultsController search-results.hbs artists[] songs[] actions bindings Wednesday, November 6, 13

Slide 18

Slide 18 text

Oredev 2013 Building Modern Web Apps ArtistRoute ArtistController artist.hbs Wednesday, November 6, 13

Slide 19

Slide 19 text

Oredev 2013 Building Modern Web Apps Activity Route Activity Controller activity.hbs Ember-Data LocalStorage D3 HeatMap Ember Component Wednesday, November 6, 13

Slide 20

Slide 20 text

Ember Tools Workflow, Boilerplate Wednesday, November 6, 13

Slide 21

Slide 21 text

Oredev 2013 Yeoman Ember Tools Ember Rails Ember App Kit Ember Workflow/Tools Matrix Wednesday, November 6, 13

Slide 22

Slide 22 text

Oredev 2013 Many ways to do manage an Ember app: 1. Manual Ember app with Rails backend ported to .NET MVC 2. Rails app w/ ember-rails that manually copied early Yeoman prototype 3. Node app w/ ember-tools ... using MEEN Boilerplate 4. RnRCall, Yeoman prototype ---> Rails RnRCall, Yeoman prototype ---> Node Have not used Ember App Kit, yet. Ember Workflow/Tools at frog Wednesday, November 6, 13

Slide 23

Slide 23 text

Prototyping w/ Ember url driven apps, using dummy data Wednesday, November 6, 13

Slide 24

Slide 24 text

Oredev 2013 URL Driven: State Manager and Routes First Populate the Controllers with Dummy Data (SearchResultsController) HandleBars template (search-results) Notice no Models, no Views Prototyping w/ Ember Wednesday, November 6, 13

Slide 25

Slide 25 text

Bindings Show/Hide Data Wednesday, November 6, 13

Slide 26

Slide 26 text

Oredev 2013 Bindings create links between two properties, such that when one changes the other is updated. SearchResultsController App.SearchResultsController = Em.ObjectController.extend({ ... artistsIsChecked: true, songsIsChecked: true, ... }); search-results.hbs {{view Ember.Checkbox checkedBinding="artistsIsChecked"}} {{#if artistsIsChecked}} ... {{/if}} Bindings Wednesday, November 6, 13

Slide 27

Slide 27 text

Loading Route Adding a Spinner and controlling Load with Promises Wednesday, November 6, 13

Slide 28

Slide 28 text

Oredev 2013 LoadingRoute App.LoadingRoute = Ember.Route.extend({}); Loading View loading.hbs RSVP Promises and adding a Delay Loading Route Wednesday, November 6, 13

Slide 29

Slide 29 text

Views Using DidInsertElement() Wednesday, November 6, 13

Slide 30

Slide 30 text

Oredev 2013 The Hotness Flames DidInsertElement() Views Wednesday, November 6, 13

Slide 31

Slide 31 text

Ember-Data Models, LocalStorageAdapter Wednesday, November 6, 13

Slide 32

Slide 32 text

Oredev 2013 LocalStorage Adapter (Activity Records) App.ApplicationAdapter = DS.LSAdapter.extend({ namespace: 'rocknrollcall' }); Ember Models Store Seeding with Better Dummy Data (Application.Initializer) later ... RESTAdpater Ember-Data Wednesday, November 6, 13

Slide 33

Slide 33 text

Ember-Testing Client-Side Integration Wednesday, November 6, 13

Slide 34

Slide 34 text

Oredev 2013 Ember-Testing Wednesday, November 6, 13

Slide 35

Slide 35 text

3rd Party JS Integration D3 and jQuery Wednesday, November 6, 13

Slide 36

Slide 36 text

Oredev 2013 Web Components D3 Hotness Heat Map 3rd Party JS and Ember Components Wednesday, November 6, 13