SlideShare a Scribd company logo
1 of 33
Download to read offline
Backbone.js in a Php
       Environment
         Midwest Php – March 2, 2013

Ken Harris – Sr. Developer, Telkonet.com
             Milwaukee, WI
Trends in Web Apps
           ●   Fatter Clients
           ●   Desktop style apps
           ●   Lots of Javascript
           ●   Lots of CSS
           ●   Requires structure




03/03/13                        Midwest Php   2
Backbone.js
 ●   Framework for client side Javascript

 ●   Organize and structure large JS applications

 ●   Lightweight – only 4kb minified

 ●   Becoming popular

03/03/13                 Midwest Php                3
Backbone.js
 ●   Agnostic & very flexible
 ●   Mixes well with other frameworks & modules
 ●   Lots of ways to do things
 ●   Two Backbone apps may look quite different
 ●   Especially good for migrating an app from
     server side to client side rendering



03/03/13                 Midwest Php              4
Backbone components
           ●   events
           ●   models
           ●   collections
           ●   views
           ●   routers




03/03/13                     Midwest Php   6
MVC Design Pattern?
 ●   Backbone is not classic MVC
 ●   Model – Data objects for resources
 ●   View – Like a view controller. Control and
     render templates.
 ●   Templates – Correspond to MVC view. Can use
     template facility of choice. Get rendered by the
     view.
 ●   Routers – Like Rails routes.

03/03/13                 Midwest Php                    7
Requirements

           ●   Underscore.js – support library
               ●   Especially for collections

           ●   Jquery or Zepto
               ●   Uses jquery.ajax to access server DB

           ●   Json2.js for RESTful persistence

03/03/13                       Midwest Php                8
Booklist Example




03/03/13         Midwest Php   9
Booklist Example




03/03/13         Midwest Php   10
Backbone.Events
 ●   Mixin module – can be added to any object
 ●   Bind, trigger, and unbind
 ●   Events are strings (eg. “change”)
 ●   Trigger can pass arguments
 ●   Changes to data models can trigger automatic
     refresh of views



03/03/13                 Midwest Php                11
Backbone.Events
var object = {};
_.extend(object, Backbone.Events);

object.bind(“poke”, function(msg) {
  alert(“Just got poked: “+msg); });

object.trigger(“poke”, “hello...”);




03/03/13                 Midwest Php   12
Backbone.Model
 ●   Heart of the application
 ●   Data + logic (conversions, validations,
     computed properties, access control, …)
 ●   Create new model by extending
     Backbone.Model
 ●   Create instance with new



03/03/13                 Midwest Php           13
Backbone.Model

var Book = Backbone.Model.extend({
       initialize: function() { // do something
                         },
       defaults: { loc : '', title : '', author : ''},
       urlRoot: '/booklist/db.php/'
  });

var book = new Book;


 03/03/13                    Midwest Php                 14
Backbone.Model
 ●   Properties
      ●    model.id – unique server id
      ●    model.cid – client id
      ●    model.defaults – default attribute values
 ●   Methods
      ●    Initialize() - called on creation
      ●    get(attribute) - getter
      ●    set(attributes) - setter
      ●    validate() - validation
03/03/13                           Midwest Php         15
Backbone.Model
 ●   More methods
       ●   fetch()
       ●   save()
       ●   destroy()
       ●   toJSON()
 ●   Events
       ●   change, destroy, error
       ●   change event can be bound to render a view

03/03/13                       Midwest Php              16
Server Interaction
 ●   Makes RESTful calls to server
 ●   CRUD (create,read,update,delete)
 ●   Create → POST      server/collection/id
 ●   Read   → GET       server/model/id
 ●   Update → PUT
 ●   Delete → DELETE
 ●   Data passed using JSON encoding

03/03/13                Midwest Php            17
Example Requests
●   METHOD host/table/id
●   GET http://myserver/customer/16
●   GET http://myserver/salesclass
●   POST http://myserver/payment
●   DELETE http://myserver/appointment/2137




03/03/13               Midwest Php            18
Backbone.Collection


●   Ordered set of models

●   Can listen for events on any model

●   Create by extending Backbone.Collection

●   Create an instance usingPhp
 03/03/13               Midwest
                                new           19
Backbone.Collection

    var Booklist = Backbone.Collection.extend({
                   model : Book,
                   url : '/phpdemo/db.php'
            });

   var booklist = new Booklist;




03/03/13                          Midwest Php     20
Backbone.Collection

●   Methods
    ●      add()
    ●      remove()
    ●      get(id)
    ●      getByCid(cid)
    ●      Comparator – ordering function
    ●      Uses underscore.js for iteration methods


03/03/13                        Midwest Php           21
Backbone.View

   ●   Control piece that renders a view
   ●   Extend Backbone.View to create new view
   ●   Use new to create an instance
   ●   View.el – associated DOM element ($el)
   ●   initialize() function
   ●   render() function
   ●       $(selector) – locally scoped jQuery
03/03/13                       Midwest Php       22
Backbone.View




03/03/13       Midwest Php   23
underscore templates
 ●   _.template(“text”) returns a template function
     which merges properties into the text
 ●   Can embed template in dummy script tag
 ●   <script type=”text/template” id=”add_template”>
     </script>
 ●   <%= value %>     or <% javascript %>
 ●   template1 = _.template(“Hi <%= name %>”);
 ●   result = template1({ name : “bob”});
03/03/13                 Midwest Php                  24
add.tmpl




03/03/13     Midwest Php   25
Backbone.Router
 ●   Route client side pages and connect them to
     actions and events
 ●   Interfaces with hashchange events
 ●   Reacts to history navigation
 ●   Need to be aware of possible server
     interactions




03/03/13                 Midwest Php               26
Backbone.Router




03/03/13        Midwest Php   27
Booklist App
           ●   server
               ●   index.php
               ●   db.php

           ●   client-side
               ●   booklist.js
               ●   templates



03/03/13                         Midwest Php   28
index.php




03/03/13     Midwest Php   29
db.php




03/03/13    Midwest Php   30
db.php - continued




03/03/13          Midwest Php   31
db.php - continued




03/03/13          Midwest Php   32
References

   ●   Backbone.js Applications (Early Access), Addy Osmani, O'Reilly
       (2012)
   ●   Backbone.js: Basics & Beyond, Sarah Mei, Fluent2012 video,
       O'Reilly (2012)
   ●   Javascript Master Class, Douglas Crockford, O'Reilly Media (2009)
   ●   Javascript The Good Parts, Douglas Crockford, O'Reilly (2008)
   ●   Javascript Web Applications, Alex MacCaw, O'Reilly (2011)
   ●   Recipes With Backbone, Nick Gauthier and Chris Strom, eee_c
       (2012)
   ●   Secrets of Javascript Ninjas, John Resig and Bear Bibeault, Manning
       (2012)


03/03/13                           Midwest Php                             33
03/03/13   Midwest Php   34

More Related Content

Similar to Backbone midwestphp

Planbox Backbone MVC
Planbox Backbone MVCPlanbox Backbone MVC
Planbox Backbone MVCAcquisio
 
HTML, CSS & Javascript Architecture (extended version) - Jan Kraus
HTML, CSS & Javascript Architecture (extended version) - Jan KrausHTML, CSS & Javascript Architecture (extended version) - Jan Kraus
HTML, CSS & Javascript Architecture (extended version) - Jan KrausWomen in Technology Poland
 
FITC presents: Mobile & offline data synchronization in Angular JS
FITC presents: Mobile & offline data synchronization in Angular JSFITC presents: Mobile & offline data synchronization in Angular JS
FITC presents: Mobile & offline data synchronization in Angular JSFITC
 
Doctrine Project
Doctrine ProjectDoctrine Project
Doctrine ProjectDaniel Lima
 
Data Abstraction for Large Web Applications
Data Abstraction for Large Web ApplicationsData Abstraction for Large Web Applications
Data Abstraction for Large Web Applicationsbrandonsavage
 
BackboneJS Training - Giving Backbone to your applications
BackboneJS Training - Giving Backbone to your applicationsBackboneJS Training - Giving Backbone to your applications
BackboneJS Training - Giving Backbone to your applicationsJoseph Khan
 
React - The JavaScript Library for User Interfaces
React - The JavaScript Library for User InterfacesReact - The JavaScript Library for User Interfaces
React - The JavaScript Library for User InterfacesJumping Bean
 
Building Web Applications with Zend Framework
Building Web Applications with Zend FrameworkBuilding Web Applications with Zend Framework
Building Web Applications with Zend FrameworkPhil Brown
 
Drupal performance and scalability
Drupal performance and scalabilityDrupal performance and scalability
Drupal performance and scalabilityTwinbit
 
Do something in 5 with gas 8-copy between databases
Do something in 5 with gas 8-copy between databasesDo something in 5 with gas 8-copy between databases
Do something in 5 with gas 8-copy between databasesBruce McPherson
 
JavascriptMVC: Another choice of web framework
JavascriptMVC: Another choice of web frameworkJavascriptMVC: Another choice of web framework
JavascriptMVC: Another choice of web frameworkAlive Kuo
 
Modern Perl Web Development with Dancer
Modern Perl Web Development with DancerModern Perl Web Development with Dancer
Modern Perl Web Development with DancerDave Cross
 
Drupal8 migrate
Drupal8 migrateDrupal8 migrate
Drupal8 migrateJohn Doyle
 

Similar to Backbone midwestphp (20)

Planbox Backbone MVC
Planbox Backbone MVCPlanbox Backbone MVC
Planbox Backbone MVC
 
Backbone 4.0
Backbone 4.0Backbone 4.0
Backbone 4.0
 
HTML, CSS & Javascript Architecture (extended version) - Jan Kraus
HTML, CSS & Javascript Architecture (extended version) - Jan KrausHTML, CSS & Javascript Architecture (extended version) - Jan Kraus
HTML, CSS & Javascript Architecture (extended version) - Jan Kraus
 
FITC presents: Mobile & offline data synchronization in Angular JS
FITC presents: Mobile & offline data synchronization in Angular JSFITC presents: Mobile & offline data synchronization in Angular JS
FITC presents: Mobile & offline data synchronization in Angular JS
 
Doctrine Project
Doctrine ProjectDoctrine Project
Doctrine Project
 
Dust.js
Dust.jsDust.js
Dust.js
 
Data Abstraction for Large Web Applications
Data Abstraction for Large Web ApplicationsData Abstraction for Large Web Applications
Data Abstraction for Large Web Applications
 
BackboneJS Training - Giving Backbone to your applications
BackboneJS Training - Giving Backbone to your applicationsBackboneJS Training - Giving Backbone to your applications
BackboneJS Training - Giving Backbone to your applications
 
React - The JavaScript Library for User Interfaces
React - The JavaScript Library for User InterfacesReact - The JavaScript Library for User Interfaces
React - The JavaScript Library for User Interfaces
 
Building Web Applications with Zend Framework
Building Web Applications with Zend FrameworkBuilding Web Applications with Zend Framework
Building Web Applications with Zend Framework
 
Drupal performance and scalability
Drupal performance and scalabilityDrupal performance and scalability
Drupal performance and scalability
 
Php
PhpPhp
Php
 
Php
PhpPhp
Php
 
Migrations
MigrationsMigrations
Migrations
 
Do something in 5 with gas 8-copy between databases
Do something in 5 with gas 8-copy between databasesDo something in 5 with gas 8-copy between databases
Do something in 5 with gas 8-copy between databases
 
JavascriptMVC: Another choice of web framework
JavascriptMVC: Another choice of web frameworkJavascriptMVC: Another choice of web framework
JavascriptMVC: Another choice of web framework
 
Node.js an Exectutive View
Node.js an Exectutive ViewNode.js an Exectutive View
Node.js an Exectutive View
 
Jsp
JspJsp
Jsp
 
Modern Perl Web Development with Dancer
Modern Perl Web Development with DancerModern Perl Web Development with Dancer
Modern Perl Web Development with Dancer
 
Drupal8 migrate
Drupal8 migrateDrupal8 migrate
Drupal8 migrate
 

Recently uploaded

UiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPathCommunity
 
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...Wes McKinney
 
Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Hiroshi SHIBATA
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Farhan Tariq
 
Glenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security ObservabilityGlenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security Observabilityitnewsafrica
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxLoriGlavin3
 
Potential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsPotential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsRavi Sanghani
 
QCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architecturesQCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architecturesBernd Ruecker
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality AssuranceInflectra
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsNathaniel Shimoni
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Mark Goldstein
 
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...Nikki Chapple
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxLoriGlavin3
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxLoriGlavin3
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
A Framework for Development in the AI Age
A Framework for Development in the AI AgeA Framework for Development in the AI Age
A Framework for Development in the AI AgeCprime
 
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfpanagenda
 
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxGenerative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxfnnc6jmgwh
 

Recently uploaded (20)

UiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to Hero
 
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
 
Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...
 
Glenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security ObservabilityGlenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security Observability
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
 
Potential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsPotential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and Insights
 
QCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architecturesQCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architectures
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directions
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
 
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptx
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
A Framework for Development in the AI Age
A Framework for Development in the AI AgeA Framework for Development in the AI Age
A Framework for Development in the AI Age
 
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
 
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxGenerative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
 

Backbone midwestphp

  • 1. Backbone.js in a Php Environment Midwest Php – March 2, 2013 Ken Harris – Sr. Developer, Telkonet.com Milwaukee, WI
  • 2. Trends in Web Apps ● Fatter Clients ● Desktop style apps ● Lots of Javascript ● Lots of CSS ● Requires structure 03/03/13 Midwest Php 2
  • 3. Backbone.js ● Framework for client side Javascript ● Organize and structure large JS applications ● Lightweight – only 4kb minified ● Becoming popular 03/03/13 Midwest Php 3
  • 4. Backbone.js ● Agnostic & very flexible ● Mixes well with other frameworks & modules ● Lots of ways to do things ● Two Backbone apps may look quite different ● Especially good for migrating an app from server side to client side rendering 03/03/13 Midwest Php 4
  • 5. Backbone components ● events ● models ● collections ● views ● routers 03/03/13 Midwest Php 6
  • 6. MVC Design Pattern? ● Backbone is not classic MVC ● Model – Data objects for resources ● View – Like a view controller. Control and render templates. ● Templates – Correspond to MVC view. Can use template facility of choice. Get rendered by the view. ● Routers – Like Rails routes. 03/03/13 Midwest Php 7
  • 7. Requirements ● Underscore.js – support library ● Especially for collections ● Jquery or Zepto ● Uses jquery.ajax to access server DB ● Json2.js for RESTful persistence 03/03/13 Midwest Php 8
  • 9. Booklist Example 03/03/13 Midwest Php 10
  • 10. Backbone.Events ● Mixin module – can be added to any object ● Bind, trigger, and unbind ● Events are strings (eg. “change”) ● Trigger can pass arguments ● Changes to data models can trigger automatic refresh of views 03/03/13 Midwest Php 11
  • 11. Backbone.Events var object = {}; _.extend(object, Backbone.Events); object.bind(“poke”, function(msg) { alert(“Just got poked: “+msg); }); object.trigger(“poke”, “hello...”); 03/03/13 Midwest Php 12
  • 12. Backbone.Model ● Heart of the application ● Data + logic (conversions, validations, computed properties, access control, …) ● Create new model by extending Backbone.Model ● Create instance with new 03/03/13 Midwest Php 13
  • 13. Backbone.Model var Book = Backbone.Model.extend({ initialize: function() { // do something }, defaults: { loc : '', title : '', author : ''}, urlRoot: '/booklist/db.php/' }); var book = new Book; 03/03/13 Midwest Php 14
  • 14. Backbone.Model ● Properties ● model.id – unique server id ● model.cid – client id ● model.defaults – default attribute values ● Methods ● Initialize() - called on creation ● get(attribute) - getter ● set(attributes) - setter ● validate() - validation 03/03/13 Midwest Php 15
  • 15. Backbone.Model ● More methods ● fetch() ● save() ● destroy() ● toJSON() ● Events ● change, destroy, error ● change event can be bound to render a view 03/03/13 Midwest Php 16
  • 16. Server Interaction ● Makes RESTful calls to server ● CRUD (create,read,update,delete) ● Create → POST server/collection/id ● Read → GET server/model/id ● Update → PUT ● Delete → DELETE ● Data passed using JSON encoding 03/03/13 Midwest Php 17
  • 17. Example Requests ● METHOD host/table/id ● GET http://myserver/customer/16 ● GET http://myserver/salesclass ● POST http://myserver/payment ● DELETE http://myserver/appointment/2137 03/03/13 Midwest Php 18
  • 18. Backbone.Collection ● Ordered set of models ● Can listen for events on any model ● Create by extending Backbone.Collection ● Create an instance usingPhp 03/03/13 Midwest new 19
  • 19. Backbone.Collection var Booklist = Backbone.Collection.extend({ model : Book, url : '/phpdemo/db.php' }); var booklist = new Booklist; 03/03/13 Midwest Php 20
  • 20. Backbone.Collection ● Methods ● add() ● remove() ● get(id) ● getByCid(cid) ● Comparator – ordering function ● Uses underscore.js for iteration methods 03/03/13 Midwest Php 21
  • 21. Backbone.View ● Control piece that renders a view ● Extend Backbone.View to create new view ● Use new to create an instance ● View.el – associated DOM element ($el) ● initialize() function ● render() function ● $(selector) – locally scoped jQuery 03/03/13 Midwest Php 22
  • 22. Backbone.View 03/03/13 Midwest Php 23
  • 23. underscore templates ● _.template(“text”) returns a template function which merges properties into the text ● Can embed template in dummy script tag ● <script type=”text/template” id=”add_template”> </script> ● <%= value %> or <% javascript %> ● template1 = _.template(“Hi <%= name %>”); ● result = template1({ name : “bob”}); 03/03/13 Midwest Php 24
  • 24. add.tmpl 03/03/13 Midwest Php 25
  • 25. Backbone.Router ● Route client side pages and connect them to actions and events ● Interfaces with hashchange events ● Reacts to history navigation ● Need to be aware of possible server interactions 03/03/13 Midwest Php 26
  • 26. Backbone.Router 03/03/13 Midwest Php 27
  • 27. Booklist App ● server ● index.php ● db.php ● client-side ● booklist.js ● templates 03/03/13 Midwest Php 28
  • 28. index.php 03/03/13 Midwest Php 29
  • 29. db.php 03/03/13 Midwest Php 30
  • 30. db.php - continued 03/03/13 Midwest Php 31
  • 31. db.php - continued 03/03/13 Midwest Php 32
  • 32. References ● Backbone.js Applications (Early Access), Addy Osmani, O'Reilly (2012) ● Backbone.js: Basics & Beyond, Sarah Mei, Fluent2012 video, O'Reilly (2012) ● Javascript Master Class, Douglas Crockford, O'Reilly Media (2009) ● Javascript The Good Parts, Douglas Crockford, O'Reilly (2008) ● Javascript Web Applications, Alex MacCaw, O'Reilly (2011) ● Recipes With Backbone, Nick Gauthier and Chris Strom, eee_c (2012) ● Secrets of Javascript Ninjas, John Resig and Bear Bibeault, Manning (2012) 03/03/13 Midwest Php 33
  • 33. 03/03/13 Midwest Php 34