97
Little Opinions Big Possibilities @BackboneRails Brian Mann The Tools and Patterns for Building Large Scale Backbone Applications Atlanta, GA

Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications

Embed Size (px)

DESCRIPTION

I gave this talk July 31 at BackboneConf 2013 in Boston, MA backboneconf.com Backbone has been used to build some of the greatest web apps in the world. Chances are, you have one running in your tabs. But the gap from first starting Backbone to building a large application is enormous. In this talk, Brian Mann will focus on closing that gap, and pave the way for creating powerful and highly scalable Backbone Apps. One of the biggest pain points of Backbone is dealing with its boilerplate code. Let’s face it; Backbone is notorious for being small and un-opinionated. While an attractive feature, it unfortunately means automation and workflow falls on developer’s shoulders. This often results in bloated code bases, reinvented patterns, frustration, and wasted time. Instead of building your application’s infrastructure from scratch, Brian will show you how to become a much happier Backbone developer by demonstrating how to build modular Backbone apps using Marionette JS. For videos and screencasts visit: http://www.backbonerails.com

Citation preview

Page 1: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications

Little Opinions Big Possibilities

@BackboneRailsBrian Mann

The Tools and Patterns for Building Large Scale Backbone Applications

Atlanta, GA

Page 2: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications
Page 3: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications
Page 4: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications

What is a large scale application?

Page 5: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications

In my view, large-scale Javascript apps are non-trivial applications requiring significant developer effort to maintain, where most heavy lifting of data manipulation and display falls to the browser.

Addy Osmani “Patterns For Large-Scale JavaScript Application Architecture”

Page 6: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications

If working on a significantly large Javascript application, remember to dedicate sufficient time to planning the underlying architecture that makes the most sense. It's often more complex than you may initially imagine.

Addy Osmani “Patterns For Large-Scale JavaScript Application Architecture”

Page 7: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications

What is not a large scale application?

Page 8: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications

http://www.todomvc.com

TodoMVC

Page 9: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications

Raising

the Bar

Page 10: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications

Google Analytics

WordPress

Rdio

Pandora

Page 11: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications
Page 12: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications
Page 13: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications
Page 14: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications
Page 15: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications
Page 16: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications
Page 17: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications
Page 18: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications
Page 19: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications
Page 20: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications
Page 21: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications
Page 22: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications
Page 23: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications

• Multiple Routers

• View Management

• Nesting

• Cleanup

• Complex Events

• Lots of state changes

• Many Entities (Models / Collections)

Characteristics

= Ton of JS Files

Page 24: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications

Overcoming the gap

Page 25: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications

Engineering is serious business

Page 26: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications

Stop blaming Backbone.

<EMBRACE IT>

Page 27: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications

The essential premise at the heart of Backbone has always been to try and discover the minimal set of data-structuring (Models and Collections) and user interface (Views and URLs) primitives that are useful when building web applications with JavaScript.

...In an ecosystem where overarching, decides-everything-for-you frameworks are commonplace, and many libraries require your site to be restructured to suit their look, feel, and default behavior — Backbone should continue to be a tool that gives you the freedom to design the full experience of your web application.

Jeremy Ashkenas Releasing Backbone v1.0

Page 28: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications

MonolithicFrameworks

Focused Small Tools

Page 29: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications

Leverage the Eco-system

Page 30: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications

Pick the Right Tool

• 2-way Data-Binding

• Nested Collections

• Advanced Querying

• Filtering / Sorting

• Grids

• View Models and Computed Properties

Stickit / RivetsBB.AssociationsBB.QueryBB.ProjectionsBackGridBB.Mutators /BB.Computed

Fields

Page 31: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications

Application Architecture

Page 32: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications

What we get

• Routers

• Views

• Events

class Router extends Backbone.Router routes: "users" : "listUsers" "users/new" : "newUser" "users/:id" : "showUser" "users/:id/edit" : "editUser" "dashboard" : "showDashboard" "admin/users" : "listAdminUsers" "admin/users/:id" : "showAdminUser" "contacts" : "listContacts" "contacts/new" : "newContact" "contacts/:id" : "showContact" listUsers: -> users = new Users users.fetch() usersView = new View({collection: users}) $("#users").html(usersView.render().el)

Page 33: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications

What we get

• Routers

• Views

• Events

class Router extends Backbone.Router routes: "users" : "listUsers" "users/new" : "newUser" "users/:id" : "showUser" "users/:id/edit" : "editUser" "dashboard" : "showDashboard" "admin/users" : "listAdminUsers" "admin/users/:id" : "showAdminUser" "contacts" : "listContacts" "contacts/new" : "newContact" "contacts/:id" : "showContact" listUsers: -> users = new Users users.fetch() usersView = new View({collection: users}) $("#users").html(usersView.render().el)

Page 34: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications

What we get

• Routers

• Views

• Events

class Router extends Backbone.Router routes: "users" : "listUsers" "users/new" : "newUser" "users/:id" : "showUser" "users/:id/edit" : "editUser" "dashboard" : "showDashboard" "admin/users" : "listAdminUsers" "admin/users/:id" : "showAdminUser" "contacts" : "listContacts" "contacts/new" : "newContact" "contacts/:id" : "showContact" listUsers: -> users = new Users users.fetch() usersView = new View({collection: users}) $("#users").html(usersView.render().el)

Page 35: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications

What we get

• Routers

• Views

• Events

class Router extends Backbone.Router routes: "users" : "listUsers" "users/new" : "newUser" "users/:id" : "showUser" "users/:id/edit" : "editUser" "dashboard" : "showDashboard" "admin/users" : "listAdminUsers" "admin/users/:id" : "showAdminUser" "contacts" : "listContacts" "contacts/new" : "newContact" "contacts/:id" : "showContact" listUsers: -> users = new Users users.fetch() usersView = new View({collection: users}) $("#users").html(usersView.render().el)

Page 36: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications

What we get

• Routers

• Views

• Events

class Router extends Backbone.Router routes: "users" : "listUsers" "users/new" : "newUser" "users/:id" : "showUser" "users/:id/edit" : "editUser" "dashboard" : "showDashboard" "admin/users" : "listAdminUsers" "admin/users/:id" : "showAdminUser" "contacts" : "listContacts" "contacts/new" : "newContact" "contacts/:id" : "showContact" listUsers: -> users = new Users users.fetch() usersView = new View({collection: users}) $("#users").html(usersView.render().el)

Page 37: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications

What we get

• Routers

• Views

• Events

class Router extends Backbone.Router routes: "users" : "listUsers" "users/new" : "newUser" "users/:id" : "showUser" "users/:id/edit" : "editUser" "dashboard" : "showDashboard" "admin/users" : "listAdminUsers" "admin/users/:id" : "showAdminUser" "contacts" : "listContacts" "contacts/new" : "newContact" "contacts/:id" : "showContact" listUsers: -> users = new Users users.fetch() usersView = new View({collection: users}) $("#users").html(usersView.render().el)

Page 38: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications

• Application• App Modules

• -Router

• -Controllers

• -Specialized Views

• Components

• Mixins

• Entities

• Config

Specialized Objects

Page 39: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications

• Application• App Modules

• -Router

• -Controllers

• -Specialized Views

• Components

• Mixins

• Entities

• Config

Specialized Objects

Page 40: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications

• Application• App Modules

• -Router

• -Controllers

• -Specialized Views

• Components

• Mixins

• Entities

• Config

• Modules

• Messaging Bus

• Request

• Command

• Pub / Sub

Specialized Objects

Page 41: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications

Visualize Our App

ULTIMATE CONTAINER

APPLICATION

Application

EntitiesUsers Sales

Items

Contacts Notes

Components

Mixins

Config

Page 42: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications

Visualize Our App

ULTIMATE CONTAINER

APPLICATION

Application

EntitiesUsers Sales

Items

Contacts Notes

Components

Mixins

Config

Page 43: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications

Visualize Our App

ULTIMATE CONTAINER

APPLICATION

Application

EntitiesUsers Sales

Items

Contacts Notes

Components

Mixins

Config

Page 44: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications

Visualize Our App

ULTIMATE CONTAINER

APPLICATION

Application

EntitiesUsers Sales

Items

Contacts Notes

Components

Mixins

Config

APPLICATION INSTANCE

#header-region

#main-region

#footer-region

Application Regions

Storing Entitiesand Resources

Page 45: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications

New ControllerShow Controller

List Controller

Visualize Our App

RESOURCE AUTHORITY

APP MODULE

ApplicationApp Module

Handlers<Requests>

<Commands><Pub / Sub >

Router

Page 46: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications

New ControllerShow Controller

List Controller

Visualize Our App

RESOURCE AUTHORITY

APP MODULE

ApplicationApp Module

Handlers<Requests>

<Commands><Pub / Sub >

Router

THE GATEKEEPER

USERS

LIST

SHOW

NEW

ADMINUSERS

LIST

EDIT

DASHBOARDUSERS LIST

<App Request><App Command>

/users/users/:id/users/new

Page 47: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications

Visualize Our App

Visual Composer

ControllerItem View

Layout

Collection View

Application

Controller

App Module

Page 48: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications

Visualize Our App

Visual Composer

ControllerItem View

Layout

Collection View

Application

Controller

App ModuleController Concerns

It Giveth Life

layout = new List.Layout

Layout

Page 49: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications

Visualize Our App

Visual Composer

ControllerItem View

Layout

Collection View

Application

Controller

App Module

UnderstandsView Dependencies

usersCollection = App.request "user:entities"

Layout

Controller Concerns

USERS COLLECTION

Page 50: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications

Visualize Our App

Visual Composer

ControllerItem View

Layout

Collection View

Application

Controller

App Module

USERS COLLECTION

Listens & Respondsto View Events

Controller Concerns

Layout

Page 51: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications

Visualize Our App

Visual Composer

ControllerItem View

Layout

Collection View

Application

Controller

App Module

USERS COLLECTION

Listens & Respondsto View Events

Controller Concerns

Layout

@listenTo layout, "show", => @listUsers(usersCollection)

listUsers: (users) -> new List.CollectionView({ collection: users })

Page 52: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications

Visualize Our App

Visual Composer

ControllerItem View

Layout

Collection View

Application

Controller

App Module

Collection View

Controller Concerns

Layout

USERS COLLECTION+

layout.usersRegion.show(collectionView)

Layout

Page 53: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications

Visualize Our App

Visual Composer

ControllerItem View

Layout

Collection View

Application

Controller

App Module

Requests AdditionalServices / Components

Controller Concerns

Page 54: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications

Visualize Our App

Visual Composer

ControllerItem View

Layout

Collection View

Application

Controller

App Module

Spinner

COMPONENTS

Form

OK

Name:Address:

Grid

Controller Concerns

Item View

Page 55: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications

Visualize Our App

Visual Composer

ControllerItem View

Layout

Collection View

Application

Controller

App Module

Spinner

COMPONENTS

Form

OK

Name:Address:

Grid

Controller Concerns

Item View

Page 56: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications

Visualize Our App

Visual Composer

ControllerItem View

Layout

Collection View

Application

Controller

App Module

Spinner

COMPONENTS

Grid

Controller Concerns

Item View

Page 57: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications

Visualize Our App

Presentation Manager

View

Application

Controller

App Module

View

<DOM />Template

Page 58: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications

Visualize Our App

Presentation Manager

View

Application

Controller

App Module

View

<DOM />Template

Event Method When This Event Triggers

before:render onBeforeRender before view’s $el has been rendered into the DOM

render onRender view’s $el has been inserted, allowing you to work with the DOM

show onShow a!er a view has been inserted by a region into the DOM

dom:refresh onDomRefresh a!er a view has been shown but has been re-rendered at a later time

before:close onBeforeClose view has been told to close. return false to prevent it from closing

close onClose a!er view is closed. run custom code such as additional cleanup

Page 59: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications

Visualize Our App

Presentation Manager

View

Application

Controller

App Module

View

<DOM />Template

class App.Views.SomeView extends Base.View mixin: ["focusable", "selectable"] onRender: -> ## We know we’re rendered, so manipulate the DOM. ## Now’s a great time to initialize a jQuery plugin. onClose: -> ## We know we’re about to be closed down. ## This is when we unbind / cleanup things we may have initialized at an earlier point.

Page 60: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications

Visualize Our App

Presentation Manager

View

Application

Controller

App Module

View

<DOM />Template

class App.Views.SomeView extends Base.View mixin: ["focusable", "selectable"] onRender: -> ## We know we’re rendered, so manipulate the DOM. ## Now’s a great time to initialize a jQuery plugin. onClose: -> ## We know we’re about to be closed down. ## This is when we unbind / cleanup things we may have initialized at an earlier point.

initialize: -> someModel = new App.Models.someModel

Page 61: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications

Visualize Our App

Presentation Manager

View

Application

Controller

App Module

View

<DOM />Template

class App.Views.SomeView extends Base.View mixin: ["focusable", "selectable"] onRender: -> ## We know we’re rendered, so manipulate the DOM. ## Now’s a great time to initialize a jQuery plugin. onClose: -> ## We know we’re about to be closed down. ## This is when we unbind / cleanup things we may have initialized at an earlier point.

initialize: -> someModel = new App.Models.someModel

Page 62: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications

Visualize Our App

Presentation Manager

View

Application

Controller

App Module

View

<DOM />Template

Specialized Views

Item View

Model

Collection View

Collection

Layout

Page 63: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications

Visualize Our App

Presentation Manager

<DOM />Template

View

Application

Controller

App Module

View

Page 64: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications

Visualize Our App

Presentation Manager

<DOM />Template

View

Application

Controller

App Module

View

Page 65: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications

Visualize Our App

Presentation Manager

<DOM />Template

View

Application

Controller

App Module

View<section> <div id="git-comment"><%= @comment %></div> <div id="git-author"> Authored by <%= @author %> on <%= @date %> </div> <div id="git-diff"> Showing <%= @num_changed %> changed files with <%= @num_additions %> additions. </div></section>

Page 68: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications

Marionette JS

Page 69: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications

• Application

• App Router

• Controllers

• Specialized Views• Layouts & Regions

• ItemView

• Collection View

• Composite View

• Modules

• Messaging Bus

• Request

• Command

• Pub / Sub

New Toys

Page 70: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications

Messaging Bus

Controller

Entities

Page 71: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications

APPLICATION

USERS

LIST SHOW NEW

ENTITIES

USER NOTE

NOTES

LIST NEW

App Modules Shared Resources

Page 72: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications

Messaging Bus

Controller

Entities

## backbone/apps/users/list/[email protected] "UsersApp.List", (List, App, Backbone, Marionette, $, _) ->

class List.Controller extends App.Controllers.Base initialize: -> users = App.request "user:entities" ## ...remaining code...

## backbone/apps/entities/[email protected] "Entities", (Entities, App, Backbone, Marionette, $, _) ->

class User extends Entities.Model

class UsersCollection extends Entities.Collection model: User

App.reqres.setHandler "user:entities", -> users = new UsersCollection users.fetch() users

Page 73: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications

Messaging Bus

Controller

Entities

## backbone/apps/users/list/[email protected] "UsersApp.List", (List, App, Backbone, Marionette, $, _) ->

class List.Controller extends App.Controllers.Base initialize: -> users = App.request "user:entities" ## ...remaining code...

## backbone/apps/entities/[email protected] "Entities", (Entities, App, Backbone, Marionette, $, _) ->

class User extends Entities.Model

class UsersCollection extends Entities.Collection model: User

App.reqres.setHandler "user:entities", -> users = new UsersCollection users.fetch() users

Page 74: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications

Messaging Bus

Controller

Entities

Page 75: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications

Messaging Bus

Controller

Entities

Application

Page 76: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications

Folder Organization

backboneapp.js

Page 77: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications

Folder Organization

backboneapp.jsapps

Page 78: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications

Folder Organization

backboneapp.jsappsconfigentitiescomponentsmixinsbase

Page 79: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications

Folder Organization

backboneapp.js

configentitiescomponentsmixinsbase

playlist playlist_songs albumalbum_comments

currently_playing

apps

Page 80: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications

Folder Organization

backboneapp.js

configentitiescomponentsmixinsbase

playlist playlist_songs albumalbum_comments

currently_playing

apps

Page 81: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications

Playlist.List

Page 82: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications
Page 83: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications

Playlist.New

Page 84: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications
Page 85: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications

Playlist.Show

Page 86: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications

Playlist.Show

Page 87: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications

Playlist.Show

Page 88: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications

Playlist.Edit

Page 89: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications

PlaylistSongs.List

Page 90: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications

CurrentlyPlaying.Show

Page 91: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications

CurrentlyPlaying.List

Page 92: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications

CurrentlyPlaying.List

Page 93: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications

apps playlist

playlist_songs

listshow

currently_playing

playlist_app.js

editnew

listplaylist_songs_app.js

listcurrently_playing_app.js

show

Page 94: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications

apps playlist

playlist_songs

listshow

currently_playing

playlist_app.js

editnew

listplaylist_songs_app.js

listcurrently_playing_app.js

show

Page 95: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications

apps playlist

playlist_songs

listshow

currently_playing

playlist_app.js

editnew

listplaylist_songs_app.js

listcurrently_playing_app.js

show

Page 96: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications

apps playlist

playlist_songs

listshow

currently_playing

playlist_app.js

editnew

listplaylist_songs_app.js

listcurrently_playing_app.js

show

Page 97: Little Opinions, Big Possibilities: The Tools and Patterns for Building Large Scale Backbone Applications

The End

@BackboneRailsBrian Mann