SlideShare ist ein Scribd-Unternehmen logo
1 von 40
Downloaden Sie, um offline zu lesen
Backbone.js
         Ivano Malavolta
    ivano.malavolta@univaq.it
http://www.di.univaq.it/malavolta
Roadmap

•   Why Backbone
•   Events
•   Model
•   Collection
•   View
•   Router
Why Backbone
We are building apps, not web sites

If your code is not structured:
• it is extremely easy that your web app
   becomes a big mess of html + css
   + javascript
• maintaining each part of your app asks
    for a deep analysis of ALL its aspects
   (logic, presentation, etc.)
• you may waste a whole day due to
   a missing “<“
What we want to avoid




Imagine yourself trying to change
• how a movie should be rendered in your app
• the REST API providing info about movies
Intuition

Backbone gives you STRUCTURE
Backbone

From the Backbone website...
                                         represent data




 manipulate            lists of models
  the DOM
Backbone (continued)
Backbone provides also features for:

• sync
   – for managing how to persist models
• events
   – for managing how data and control are exchanged
     within your app
• router
   – for managing the interaction flow among views
Roadmap

•   Why Backbone
•   Events
•   Models
•   Collections
•   Views
•   Router
Events

Events is a module that can be mixed in to any object

It gives the object the ability to bind and trigger
  custom named events

It is extremely useful for exchanging data and control
  among objects
object will react to
  the “alert” event
                       Events API
 (the “off” function
detaches the event)                        event parameters




                         the “alert” event is
                                fired
Roadmap

•   Why Backbone
•   Events
•   Models
•   Collections
•   Views
•   Router
Models
Models represent your data

Each model represent a data type in your app, together
  with the logic surrounding it, like:
• persistence
• conversions
• validations
• computed properties
• access control
Models

You extend Backbone.Model with your domain-specific
  methods, and Model provides a basic set of
  functionality for managing changes, like:

•   getter and setter
•   id
•   constructor
•   JSON persistance
Example of Model
custom method




                           setting an
                                         event fired
                           attribute
                                        when “color”
                                          changes


                                          custom
                                          method
                                        invocation
Model Constructor and Attributes

• initialize()
  initialize()
   – it is triggered every time you create a new instance of a
     model
   – it works also for collections and views
   – it can take an JS object for setting also attributes
• get() & set()
  get()
   – they are used to set and retrieve the value of certain
     attributes
• defaults
   – a property named 'defaults' in your model declaration
Example
Sync

Backbone.sync is the function that Backbone calls
  every time it attempts to read or save a model

By default, it uses Ajax to make a RESTful JSON
  request to a server
Sync Usage
Usually, you will not use the sync method directly you
                                             directly,
  will it implicitly when you call one of these methods

• Models
   – fetch: gets the most up-to-date values of the model instance
   – save: persists the model instance
   – destroy: deletes the model instance
• Collections
   – fetch
   – create
Sync

You can override it in order to use a different
  persistence strategy, such as:
• WebSockets
• Local Storage
• WebSQL




Backbone.sync is the default global function that all
  models use unless the models have a sync method
  specifically set
Sync Signature              example of overriden sync:
                              http://bit.ly/KWdxNN

The method signature of Backbone.sync is

      sync(method, model, [options])

• method the CRUD method ("create“, "read“, "update",
  method:
  or "delete")
• model the model (or collection) to be synced
  model:
• options – success and error callbacks, and all other
  jQuery request options
Roadmap

•   Why Backbone
•   Events
•   Models
•   Collections
•   Views
•   Router
Collections

Collections are ordered sets of models

You can
• bind "change" events to be notified when any model
  in the collection has been modified
• listen for "add" and "remove"events
• fetch the collection from the server (or other
  persistence layer)
Collections

Any event that is triggered on a model in a collection
  will also be triggered on the collection directly

The model attribute of a collection represents the
  kind of model that can be stored in it
Example
Collection Methods
Methods on collections include:

•   fetch:
    fetch gets all the models of a collection
•   create:
    create creates a new model within the collection
•   reset:
    reset updates the collection in bulk
•   add: adds a model to the collection
    add
•   remove:
    remove removes a model from the collection
•   at:
    at returns a specific model from the collection
•   sort:
    sort sorts the collection
Roadmap

•   Why Backbone
•   Events
•   Models
•   Collections
•   Views
•   Router
Views

Views represent and manage the visible parts of your
  application

They are also used to listen to interaction events and
  react accordingly
Views

All views have a DOM element at all times, even if they
  are already in the page or not

   views can be rendered at any time, and inserted into
  the DOM all at once

   you get high-performance UI rendering with as few
  reflows and repaints as possible
View DOM element
this.el is a reference to the DOM element, it is
  created from:
• tagName
   – for example body, ul, span, img
• className
   – class name of some element within the DOM
• id
   – id of an element within the DOM


If none of them is specified, el is an empty <div>
View DOM render()
The render() method is used to update the this.el
  element with the new HTML

The default implementation of render is a no-op
   you have to override it to create the new HTML

Backbone is agnostic with respect to your code in
  render(), however...
     you are STRONGLY encouraged to use a
     Javascript templating library here
Example
Roadmap

•   Why Backbone
•   Events
•   Models
•   Collections
•   Views
•   Router
Router

Backbone.Router provides methods for routing client-
  side pages, and connecting them to actions and
  events

At a minimum, a router is composed of two main parts:

• routes
   – an hash that pairs routes to actions
• actions
   – JS functions triggered when certain routes are navigated
Routes
It is an hash that maps URLs to functions on your
  router

URLs fragments can also contain dynamic data via
  Backbone-specific URL parts:

• parameter
  – match a single URL component between slashes
• splat
  – match any number of URL components
Example
History

History serves as a global router to
1. handle hashchange events
2. match the appropriate route
3. trigger callbacks

You should never access it directly, you just need call
   Backbone.history.start() to begin
   monitoring hashchange events, and dispatching
   routes in your app
Summary: Classical Workflow
1. You dig into JSON objects
2. look up elements in the DOM
3. update the HTML by hand           you
               DOM
              events
  JS                   DOM
scripts
              DOM
             updates
                         interacts
      data & events

   data
  sources
Summary: Backbone
You organize your interface into logical views backed by models

Each view can be updated independently when the model
  changes, without having to redraw the page
                                         DOM
     model events                       events
                         View
                                                 DOM   interacts
                                     DOM
     Model      model updates       updates

        sync            routing

   data
  sources                  Router
Summary: Backbone

You can bind your view‘s render()
  function to the model‘s "change”
  event

   now everywhere that model data
  is displayed in the UI, it is always
  immediately up to date
References


http://backbonejs.org

Weitere ähnliche Inhalte

Was ist angesagt?

Introduction to Backbone.js for Rails developers
Introduction to Backbone.js for Rails developersIntroduction to Backbone.js for Rails developers
Introduction to Backbone.js for Rails developers
AoteaStudios
 
J query presentation
J query presentationJ query presentation
J query presentation
akanksha17
 
BackboneJS and friends
BackboneJS and friendsBackboneJS and friends
BackboneJS and friends
Scott Cowan
 
Knockout implementing mvvm in java script with knockout
Knockout implementing mvvm in java script with knockoutKnockout implementing mvvm in java script with knockout
Knockout implementing mvvm in java script with knockout
Andoni Arroyo
 
Android and IOS UI Development (Android 5.0 and iOS 9.0)
Android and IOS UI Development (Android 5.0 and iOS 9.0)Android and IOS UI Development (Android 5.0 and iOS 9.0)
Android and IOS UI Development (Android 5.0 and iOS 9.0)
Michael Shrove
 
Cert05 70-487 - developing microsoft azure and web services
Cert05   70-487 - developing microsoft azure and web servicesCert05   70-487 - developing microsoft azure and web services
Cert05 70-487 - developing microsoft azure and web services
DotNetCampus
 
Angular js presentation at Datacom
Angular js presentation at DatacomAngular js presentation at Datacom
Angular js presentation at Datacom
David Xi Peng Yang
 
Soa development using javascript
Soa development using javascriptSoa development using javascript
Soa development using javascript
DsixE Inc
 

Was ist angesagt? (20)

[2015/2016] The REST architectural style
[2015/2016] The REST architectural style[2015/2016] The REST architectural style
[2015/2016] The REST architectural style
 
Introduction to Backbone.js for Rails developers
Introduction to Backbone.js for Rails developersIntroduction to Backbone.js for Rails developers
Introduction to Backbone.js for Rails developers
 
Fast mobile web apps
Fast mobile web appsFast mobile web apps
Fast mobile web apps
 
HTML5 & CSS3 refresher for mobile apps
HTML5 & CSS3 refresher for mobile appsHTML5 & CSS3 refresher for mobile apps
HTML5 & CSS3 refresher for mobile apps
 
Building rich Single Page Applications (SPAs) for desktop, mobile, and tablet...
Building rich Single Page Applications (SPAs) for desktop, mobile, and tablet...Building rich Single Page Applications (SPAs) for desktop, mobile, and tablet...
Building rich Single Page Applications (SPAs) for desktop, mobile, and tablet...
 
Frameworks Galore: A Pragmatic Review
Frameworks Galore: A Pragmatic ReviewFrameworks Galore: A Pragmatic Review
Frameworks Galore: A Pragmatic Review
 
Planbox Backbone MVC
Planbox Backbone MVCPlanbox Backbone MVC
Planbox Backbone MVC
 
Backbone js-slides
Backbone js-slidesBackbone js-slides
Backbone js-slides
 
J query presentation
J query presentationJ query presentation
J query presentation
 
BackboneJS and friends
BackboneJS and friendsBackboneJS and friends
BackboneJS and friends
 
Tikal's Backbone_js introduction workshop
Tikal's Backbone_js introduction workshopTikal's Backbone_js introduction workshop
Tikal's Backbone_js introduction workshop
 
Knockout implementing mvvm in java script with knockout
Knockout implementing mvvm in java script with knockoutKnockout implementing mvvm in java script with knockout
Knockout implementing mvvm in java script with knockout
 
Ajax
AjaxAjax
Ajax
 
Backbone js
Backbone jsBackbone js
Backbone js
 
Android and IOS UI Development (Android 5.0 and iOS 9.0)
Android and IOS UI Development (Android 5.0 and iOS 9.0)Android and IOS UI Development (Android 5.0 and iOS 9.0)
Android and IOS UI Development (Android 5.0 and iOS 9.0)
 
Cert05 70-487 - developing microsoft azure and web services
Cert05   70-487 - developing microsoft azure and web servicesCert05   70-487 - developing microsoft azure and web services
Cert05 70-487 - developing microsoft azure and web services
 
Angular js presentation at Datacom
Angular js presentation at DatacomAngular js presentation at Datacom
Angular js presentation at Datacom
 
Angular js 1.3 basic tutorial
Angular js 1.3 basic tutorialAngular js 1.3 basic tutorial
Angular js 1.3 basic tutorial
 
Soa development using javascript
Soa development using javascriptSoa development using javascript
Soa development using javascript
 
Staying Sane with Drupal (A Develper's Survival Guide)
Staying Sane with Drupal (A Develper's Survival Guide)Staying Sane with Drupal (A Develper's Survival Guide)
Staying Sane with Drupal (A Develper's Survival Guide)
 

Ähnlich wie Backbone.js

Backbone.js slides
Backbone.js slidesBackbone.js slides
Backbone.js slides
Ambert Ho
 
Apache Cayenne for WO Devs
Apache Cayenne for WO DevsApache Cayenne for WO Devs
Apache Cayenne for WO Devs
WO Community
 
Django introduction @ UGent
Django introduction @ UGentDjango introduction @ UGent
Django introduction @ UGent
kevinvw
 
Backbonejs
BackbonejsBackbonejs
Backbonejs
Sam Lee
 
Rp 6 session 2 naresh bhatia
Rp 6  session 2 naresh bhatiaRp 6  session 2 naresh bhatia
Rp 6 session 2 naresh bhatia
sapientindia
 

Ähnlich wie Backbone.js (20)

Developing maintainable Cordova applications
Developing maintainable Cordova applicationsDeveloping maintainable Cordova applications
Developing maintainable Cordova applications
 
MV* presentation frameworks in Javascript: en garde, pret, allez!
MV* presentation frameworks in Javascript: en garde, pret, allez!MV* presentation frameworks in Javascript: en garde, pret, allez!
MV* presentation frameworks in Javascript: en garde, pret, allez!
 
Ember vs Backbone
Ember vs BackboneEmber vs Backbone
Ember vs Backbone
 
Show Some Spine!
Show Some Spine!Show Some Spine!
Show Some Spine!
 
Backbone.js slides
Backbone.js slidesBackbone.js slides
Backbone.js slides
 
Apache Cayenne for WO Devs
Apache Cayenne for WO DevsApache Cayenne for WO Devs
Apache Cayenne for WO Devs
 
Intro lift
Intro liftIntro lift
Intro lift
 
Understanding angular js
Understanding angular jsUnderstanding angular js
Understanding angular js
 
ASP.NET MVC 5 - EF 6 - VS2015
ASP.NET MVC 5 - EF 6 - VS2015ASP.NET MVC 5 - EF 6 - VS2015
ASP.NET MVC 5 - EF 6 - VS2015
 
Viking academy backbone.js
Viking academy  backbone.jsViking academy  backbone.js
Viking academy backbone.js
 
Comparing Angular and React JS for SPAs
Comparing Angular and React JS for SPAsComparing Angular and React JS for SPAs
Comparing Angular and React JS for SPAs
 
Client Side MVC with Backbone and Rails
Client Side MVC with Backbone and RailsClient Side MVC with Backbone and Rails
Client Side MVC with Backbone and Rails
 
Django introduction @ UGent
Django introduction @ UGentDjango introduction @ UGent
Django introduction @ UGent
 
AngularJS
AngularJSAngularJS
AngularJS
 
Angular js workshop
Angular js workshopAngular js workshop
Angular js workshop
 
AngularJS
AngularJSAngularJS
AngularJS
 
AngularJS 1.x - your first application (problems and solutions)
AngularJS 1.x - your first application (problems and solutions)AngularJS 1.x - your first application (problems and solutions)
AngularJS 1.x - your first application (problems and solutions)
 
Backbonejs
BackbonejsBackbonejs
Backbonejs
 
Rp 6 session 2 naresh bhatia
Rp 6  session 2 naresh bhatiaRp 6  session 2 naresh bhatia
Rp 6 session 2 naresh bhatia
 
Intro to emberjs
Intro to emberjsIntro to emberjs
Intro to emberjs
 

Mehr von Ivano Malavolta

Mehr von Ivano Malavolta (20)

Conducting Experiments on the Software Architecture of Robotic Systems (QRARS...
Conducting Experiments on the Software Architecture of Robotic Systems (QRARS...Conducting Experiments on the Software Architecture of Robotic Systems (QRARS...
Conducting Experiments on the Software Architecture of Robotic Systems (QRARS...
 
The H2020 experience
The H2020 experienceThe H2020 experience
The H2020 experience
 
The Green Lab - Research cocktail @Vrije Universiteit Amsterdam (October 2020)
The Green Lab - Research cocktail  @Vrije Universiteit Amsterdam (October 2020)The Green Lab - Research cocktail  @Vrije Universiteit Amsterdam (October 2020)
The Green Lab - Research cocktail @Vrije Universiteit Amsterdam (October 2020)
 
Software sustainability and Green IT
Software sustainability and Green ITSoftware sustainability and Green IT
Software sustainability and Green IT
 
Navigation-aware and Personalized Prefetching of Network Requests in Android ...
Navigation-aware and Personalized Prefetching of Network Requests in Android ...Navigation-aware and Personalized Prefetching of Network Requests in Android ...
Navigation-aware and Personalized Prefetching of Network Requests in Android ...
 
How Maintainability Issues of Android Apps Evolve [ICSME 2018]
How Maintainability Issues of Android Apps Evolve [ICSME 2018]How Maintainability Issues of Android Apps Evolve [ICSME 2018]
How Maintainability Issues of Android Apps Evolve [ICSME 2018]
 
Collaborative Model-Driven Software Engineering: a Classification Framework a...
Collaborative Model-Driven Software Engineering: a Classification Framework a...Collaborative Model-Driven Software Engineering: a Classification Framework a...
Collaborative Model-Driven Software Engineering: a Classification Framework a...
 
Experimenting on Mobile Apps Quality - a tale about Energy, Performance, and ...
Experimenting on Mobile Apps Quality - a tale about Energy, Performance, and ...Experimenting on Mobile Apps Quality - a tale about Energy, Performance, and ...
Experimenting on Mobile Apps Quality - a tale about Energy, Performance, and ...
 
Modeling objects interaction via UML sequence diagrams [Software Design] [Com...
Modeling objects interaction via UML sequence diagrams [Software Design] [Com...Modeling objects interaction via UML sequence diagrams [Software Design] [Com...
Modeling objects interaction via UML sequence diagrams [Software Design] [Com...
 
Modeling behaviour via UML state machines [Software Design] [Computer Science...
Modeling behaviour via UML state machines [Software Design] [Computer Science...Modeling behaviour via UML state machines [Software Design] [Computer Science...
Modeling behaviour via UML state machines [Software Design] [Computer Science...
 
Object-oriented design patterns in UML [Software Design] [Computer Science] [...
Object-oriented design patterns in UML [Software Design] [Computer Science] [...Object-oriented design patterns in UML [Software Design] [Computer Science] [...
Object-oriented design patterns in UML [Software Design] [Computer Science] [...
 
Structure modeling with UML [Software Design] [Computer Science] [Vrije Unive...
Structure modeling with UML [Software Design] [Computer Science] [Vrije Unive...Structure modeling with UML [Software Design] [Computer Science] [Vrije Unive...
Structure modeling with UML [Software Design] [Computer Science] [Vrije Unive...
 
Requirements engineering with UML [Software Design] [Computer Science] [Vrije...
Requirements engineering with UML [Software Design] [Computer Science] [Vrije...Requirements engineering with UML [Software Design] [Computer Science] [Vrije...
Requirements engineering with UML [Software Design] [Computer Science] [Vrije...
 
Modeling and abstraction, software development process [Software Design] [Com...
Modeling and abstraction, software development process [Software Design] [Com...Modeling and abstraction, software development process [Software Design] [Com...
Modeling and abstraction, software development process [Software Design] [Com...
 
[2017/2018] Agile development
[2017/2018] Agile development[2017/2018] Agile development
[2017/2018] Agile development
 
Reconstructing microservice-based architectures
Reconstructing microservice-based architecturesReconstructing microservice-based architectures
Reconstructing microservice-based architectures
 
[2017/2018] AADL - Architecture Analysis and Design Language
[2017/2018] AADL - Architecture Analysis and Design Language[2017/2018] AADL - Architecture Analysis and Design Language
[2017/2018] AADL - Architecture Analysis and Design Language
 
[2017/2018] Architectural languages
[2017/2018] Architectural languages[2017/2018] Architectural languages
[2017/2018] Architectural languages
 
[2017/2018] Introduction to Software Architecture
[2017/2018] Introduction to Software Architecture[2017/2018] Introduction to Software Architecture
[2017/2018] Introduction to Software Architecture
 
[2017/2018] RESEARCH in software engineering
[2017/2018] RESEARCH in software engineering[2017/2018] RESEARCH in software engineering
[2017/2018] RESEARCH in software engineering
 

Kürzlich hochgeladen

Activity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdfActivity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdf
ciinovamais
 
The basics of sentences session 3pptx.pptx
The basics of sentences session 3pptx.pptxThe basics of sentences session 3pptx.pptx
The basics of sentences session 3pptx.pptx
heathfieldcps1
 

Kürzlich hochgeladen (20)

Grant Readiness 101 TechSoup and Remy Consulting
Grant Readiness 101 TechSoup and Remy ConsultingGrant Readiness 101 TechSoup and Remy Consulting
Grant Readiness 101 TechSoup and Remy Consulting
 
Unit-V; Pricing (Pharma Marketing Management).pptx
Unit-V; Pricing (Pharma Marketing Management).pptxUnit-V; Pricing (Pharma Marketing Management).pptx
Unit-V; Pricing (Pharma Marketing Management).pptx
 
Key note speaker Neum_Admir Softic_ENG.pdf
Key note speaker Neum_Admir Softic_ENG.pdfKey note speaker Neum_Admir Softic_ENG.pdf
Key note speaker Neum_Admir Softic_ENG.pdf
 
Kodo Millet PPT made by Ghanshyam bairwa college of Agriculture kumher bhara...
Kodo Millet  PPT made by Ghanshyam bairwa college of Agriculture kumher bhara...Kodo Millet  PPT made by Ghanshyam bairwa college of Agriculture kumher bhara...
Kodo Millet PPT made by Ghanshyam bairwa college of Agriculture kumher bhara...
 
Sociology 101 Demonstration of Learning Exhibit
Sociology 101 Demonstration of Learning ExhibitSociology 101 Demonstration of Learning Exhibit
Sociology 101 Demonstration of Learning Exhibit
 
How to Give a Domain for a Field in Odoo 17
How to Give a Domain for a Field in Odoo 17How to Give a Domain for a Field in Odoo 17
How to Give a Domain for a Field in Odoo 17
 
Activity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdfActivity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdf
 
Food safety_Challenges food safety laboratories_.pdf
Food safety_Challenges food safety laboratories_.pdfFood safety_Challenges food safety laboratories_.pdf
Food safety_Challenges food safety laboratories_.pdf
 
Third Battle of Panipat detailed notes.pptx
Third Battle of Panipat detailed notes.pptxThird Battle of Panipat detailed notes.pptx
Third Battle of Panipat detailed notes.pptx
 
TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...
TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...
TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...
 
Basic Civil Engineering first year Notes- Chapter 4 Building.pptx
Basic Civil Engineering first year Notes- Chapter 4 Building.pptxBasic Civil Engineering first year Notes- Chapter 4 Building.pptx
Basic Civil Engineering first year Notes- Chapter 4 Building.pptx
 
The basics of sentences session 3pptx.pptx
The basics of sentences session 3pptx.pptxThe basics of sentences session 3pptx.pptx
The basics of sentences session 3pptx.pptx
 
This PowerPoint helps students to consider the concept of infinity.
This PowerPoint helps students to consider the concept of infinity.This PowerPoint helps students to consider the concept of infinity.
This PowerPoint helps students to consider the concept of infinity.
 
Mehran University Newsletter Vol-X, Issue-I, 2024
Mehran University Newsletter Vol-X, Issue-I, 2024Mehran University Newsletter Vol-X, Issue-I, 2024
Mehran University Newsletter Vol-X, Issue-I, 2024
 
General Principles of Intellectual Property: Concepts of Intellectual Proper...
General Principles of Intellectual Property: Concepts of Intellectual  Proper...General Principles of Intellectual Property: Concepts of Intellectual  Proper...
General Principles of Intellectual Property: Concepts of Intellectual Proper...
 
SKILL OF INTRODUCING THE LESSON MICRO SKILLS.pptx
SKILL OF INTRODUCING THE LESSON MICRO SKILLS.pptxSKILL OF INTRODUCING THE LESSON MICRO SKILLS.pptx
SKILL OF INTRODUCING THE LESSON MICRO SKILLS.pptx
 
Making communications land - Are they received and understood as intended? we...
Making communications land - Are they received and understood as intended? we...Making communications land - Are they received and understood as intended? we...
Making communications land - Are they received and understood as intended? we...
 
Introduction to Nonprofit Accounting: The Basics
Introduction to Nonprofit Accounting: The BasicsIntroduction to Nonprofit Accounting: The Basics
Introduction to Nonprofit Accounting: The Basics
 
Understanding Accommodations and Modifications
Understanding  Accommodations and ModificationsUnderstanding  Accommodations and Modifications
Understanding Accommodations and Modifications
 
Spatium Project Simulation student brief
Spatium Project Simulation student briefSpatium Project Simulation student brief
Spatium Project Simulation student brief
 

Backbone.js

  • 1. Backbone.js Ivano Malavolta ivano.malavolta@univaq.it http://www.di.univaq.it/malavolta
  • 2. Roadmap • Why Backbone • Events • Model • Collection • View • Router
  • 3. Why Backbone We are building apps, not web sites If your code is not structured: • it is extremely easy that your web app becomes a big mess of html + css + javascript • maintaining each part of your app asks for a deep analysis of ALL its aspects (logic, presentation, etc.) • you may waste a whole day due to a missing “<“
  • 4. What we want to avoid Imagine yourself trying to change • how a movie should be rendered in your app • the REST API providing info about movies
  • 6. Backbone From the Backbone website... represent data manipulate lists of models the DOM
  • 7. Backbone (continued) Backbone provides also features for: • sync – for managing how to persist models • events – for managing how data and control are exchanged within your app • router – for managing the interaction flow among views
  • 8. Roadmap • Why Backbone • Events • Models • Collections • Views • Router
  • 9. Events Events is a module that can be mixed in to any object It gives the object the ability to bind and trigger custom named events It is extremely useful for exchanging data and control among objects
  • 10. object will react to the “alert” event Events API (the “off” function detaches the event) event parameters the “alert” event is fired
  • 11. Roadmap • Why Backbone • Events • Models • Collections • Views • Router
  • 12. Models Models represent your data Each model represent a data type in your app, together with the logic surrounding it, like: • persistence • conversions • validations • computed properties • access control
  • 13. Models You extend Backbone.Model with your domain-specific methods, and Model provides a basic set of functionality for managing changes, like: • getter and setter • id • constructor • JSON persistance
  • 14. Example of Model custom method setting an event fired attribute when “color” changes custom method invocation
  • 15. Model Constructor and Attributes • initialize() initialize() – it is triggered every time you create a new instance of a model – it works also for collections and views – it can take an JS object for setting also attributes • get() & set() get() – they are used to set and retrieve the value of certain attributes • defaults – a property named 'defaults' in your model declaration
  • 17. Sync Backbone.sync is the function that Backbone calls every time it attempts to read or save a model By default, it uses Ajax to make a RESTful JSON request to a server
  • 18. Sync Usage Usually, you will not use the sync method directly you directly, will it implicitly when you call one of these methods • Models – fetch: gets the most up-to-date values of the model instance – save: persists the model instance – destroy: deletes the model instance • Collections – fetch – create
  • 19. Sync You can override it in order to use a different persistence strategy, such as: • WebSockets • Local Storage • WebSQL Backbone.sync is the default global function that all models use unless the models have a sync method specifically set
  • 20. Sync Signature example of overriden sync: http://bit.ly/KWdxNN The method signature of Backbone.sync is sync(method, model, [options]) • method the CRUD method ("create“, "read“, "update", method: or "delete") • model the model (or collection) to be synced model: • options – success and error callbacks, and all other jQuery request options
  • 21. Roadmap • Why Backbone • Events • Models • Collections • Views • Router
  • 22. Collections Collections are ordered sets of models You can • bind "change" events to be notified when any model in the collection has been modified • listen for "add" and "remove"events • fetch the collection from the server (or other persistence layer)
  • 23. Collections Any event that is triggered on a model in a collection will also be triggered on the collection directly The model attribute of a collection represents the kind of model that can be stored in it
  • 25. Collection Methods Methods on collections include: • fetch: fetch gets all the models of a collection • create: create creates a new model within the collection • reset: reset updates the collection in bulk • add: adds a model to the collection add • remove: remove removes a model from the collection • at: at returns a specific model from the collection • sort: sort sorts the collection
  • 26. Roadmap • Why Backbone • Events • Models • Collections • Views • Router
  • 27. Views Views represent and manage the visible parts of your application They are also used to listen to interaction events and react accordingly
  • 28. Views All views have a DOM element at all times, even if they are already in the page or not views can be rendered at any time, and inserted into the DOM all at once you get high-performance UI rendering with as few reflows and repaints as possible
  • 29. View DOM element this.el is a reference to the DOM element, it is created from: • tagName – for example body, ul, span, img • className – class name of some element within the DOM • id – id of an element within the DOM If none of them is specified, el is an empty <div>
  • 30. View DOM render() The render() method is used to update the this.el element with the new HTML The default implementation of render is a no-op you have to override it to create the new HTML Backbone is agnostic with respect to your code in render(), however... you are STRONGLY encouraged to use a Javascript templating library here
  • 32. Roadmap • Why Backbone • Events • Models • Collections • Views • Router
  • 33. Router Backbone.Router provides methods for routing client- side pages, and connecting them to actions and events At a minimum, a router is composed of two main parts: • routes – an hash that pairs routes to actions • actions – JS functions triggered when certain routes are navigated
  • 34. Routes It is an hash that maps URLs to functions on your router URLs fragments can also contain dynamic data via Backbone-specific URL parts: • parameter – match a single URL component between slashes • splat – match any number of URL components
  • 36. History History serves as a global router to 1. handle hashchange events 2. match the appropriate route 3. trigger callbacks You should never access it directly, you just need call Backbone.history.start() to begin monitoring hashchange events, and dispatching routes in your app
  • 37. Summary: Classical Workflow 1. You dig into JSON objects 2. look up elements in the DOM 3. update the HTML by hand you DOM events JS DOM scripts DOM updates interacts data & events data sources
  • 38. Summary: Backbone You organize your interface into logical views backed by models Each view can be updated independently when the model changes, without having to redraw the page DOM model events events View DOM interacts DOM Model model updates updates sync routing data sources Router
  • 39. Summary: Backbone You can bind your view‘s render() function to the model‘s "change” event now everywhere that model data is displayed in the UI, it is always immediately up to date