SlideShare a Scribd company logo
1 of 18
Download to read offline
CLIENT-SIDE MVC
                         A brief introduction by Thomas Gorissen

Freitag, 11. März 2011
ME?
                         1996
                                • <blink>Hello World</blink>

                                • “WebMaster”

                                • JS/PHP
                         1999

                                • Starcraft




                                                               http://thomasgorissen.com
                                • C#   .NET / Forms
                         2005


                                • Ruby

                                • ASP   MVC
                         2010   • JS

Freitag, 11. März 2011
is
    • Model/View/Controller                    • Structure   provider
        Javascript Framework
                                               • RESTful   JSON Connector
    • Released           13th Oct 2010
                                               • Hash-Routing    Engine
    • @DocumentCloud
        project                                • Event-driven

    • MIT            licensed and on GitHub    • Lightweight   (6.9kb)


Freitag, 11. März 2011
is not


                         • DOM Accessor

                         • Animation   toolkit

                         • Control   suite

                         • All   in wonder package



Freitag, 11. März 2011
WHAT IS IT FOR?


                            All Client-Side
                         Rendered Applications



Freitag, 11. März 2011
AHA, HOW IS THAT?
     • If  you do a lot of
         JavaScript, things tend to   Model          Controller
         get messy!

     • Backbone    provides a way
         to organize your code, by            View
         using the MVC pattern

     • Only   the View accesses
         the DOM (e.g. with                   DOM

         jQuery, Zepto, ...)

Freitag, 11. März 2011
ALTHOUGH...

                                                                   outi neng-
                                                                  R Controller
                                                                     ngi
                                                    Model
    • ... it’s           a bit wrongly labeled
                                                 + Collection
                                                                   E

    •I     call it a “dirty” MVC                        ConViewoller
                                                            tr


                                                                 iew
                                                                VDOM

Freitag, 11. März 2011
THE MODEL
                         var Tweet = Backbone.Model.extend({

                         !     // Overrides
                         !     initialize: function(params) {
                         !     !       if(params.id && !params.text)
                         !     !       !    this.fetch();
                         !     },
                         !
                         !     url: function() {
                         !     !      return "http://twitter.com/statuses/show/" + this.id +".json";
                         !     },
                         !
                         !     defaults: {!
                         !     !    highlighted: false
                         !     },
                         !
                         !     // Custom function
                         !     highlight: function() {
                         !     !     this.set({
                         !     !     !     highlighted: !this.get("highlighted")
                         !     !     });
                         !     }

                         });


Freitag, 11. März 2011
THE MODEL
                                                 Functions/Params
    • Easy               to auto generate        •
                                                 •
                                                     – extend
                                                     – constructor / initialize
                                                 •   – get
                                                 •   – escape
                                                 •   – set

    • Holds               data better then the   •
                                                 •
                                                     – unset
                                                     – clear


        DOM                                      •
                                                 •
                                                 •
                                                     – id
                                                     – cid
                                                     – attributes
                                                 •   – defaults
                                                 •   - toJSON

    • Throws                change events        •
                                                 •
                                                     – fetch
                                                     – save
                                                 •   – destroy
                                                 •   – validate
                                                 •   – url

    • Can    connect to a URL to                 •
                                                 •
                                                     – parse
                                                     – clone


        populate from or persist to              •   – isNew
                                                 •   – change
                                                 •   – hasChanged

        the server                               •
                                                 •
                                                     – changedAttributes
                                                     – previous
                                                 •   – previousAttributes




Freitag, 11. März 2011
THE COLLECTION

                         var UserTweets = Backbone.Collection.extend({

                         !         // Overrides
                         !         model: Tweet,
                         !
                         !         url: function() {
                         !         !      return "http://twitter.com/statuses/user_timeline/" + this.user + ".json?count=10";
                         !         },
                         !
                         !         // Custom function
                         !         highlighted: function() {
                                   !     return this.filter(function(tweet) {
                                   !     !    return tweet.get('highlighted');
                                   !     });
                               }

                         });




Freitag, 11. März 2011
THE COLLECTION
    • Easy               to auto generate, as well   Functions/Params
                                                     •   – extend                     ◦   forEach (each)
                                                     •   – model                      ◦   map
                                                     •                                ◦   reduce (foldl, inject)
    • For    bulk handling model
                                                         – constructor / initialize
                                                     •   – models                     ◦   reduceRight (foldr)
                                                     •   – toJSON                     ◦   find (detect)

         objects                                     •
                                                     •
                                                         – Underscore Methods (25)
                                                         – add
                                                                                      ◦
                                                                                      ◦
                                                                                          filter (select)
                                                                                          reject
                                                     •   – remove                     ◦   every (all)
                                                     •   – get                        ◦   some (any)
                                                     •   – getByCid                       include
    • Throws                change events
                                                                                      ◦
                                                     •   – at
                                                                                      ◦   invoke
                                                     •   – length
                                                                                      ◦   max
                                                     •   – comparator
                                                                                      ◦   min
                                                     •   – sort
                                                                                      ◦   sortBy
                                                     •
    • Can    connect to a URL to
                                                         – pluck
                                                                                      ◦   sortedIndex
                                                     •   – url
                                                                                      ◦   toArray
                                                     •   – parse

         populate from the server
                                                                                      ◦   size
                                                     •   – fetch
                                                     •   – refresh                    ◦   first
                                                     •   – create                     ◦   rest
                                                                                      ◦   last
                                                                                      ◦   without

    • Tons               of query functions                                           ◦
                                                                                      ◦
                                                                                          indexOf
                                                                                          lastIndexOf
                                                                                      ◦   isEmpty
                                                                                      ◦   chain



Freitag, 11. März 2011
THE VIEW
                                                   or th                        e cont roller

                         var TweetView = Backbone.View.extend({
                         !
                         ! initialize: function() {
                         ! !       _.bindAll(this, "render");
                         ! !       this.model.bind("change", this.render);
                         ! },
                         ! !
                         ! events: {
                         ! !       "click": "highlight"
                         ! },
                         !
                         ! render: function() {
                         ! !       this.el = this.make("li", {
                         ! !       !     className: this.model.get("highlighted") ? "highlighted" : "normal"
                         ! !       }, this.model.get("text"));
                         ! !       return this;
                         ! },
                         !
                         ! highlight: function() {
                         ! !       this.model.highlight();
                         ! }
                         !
                         });


Freitag, 11. März 2011
THE VIEWe cont
                                        or th
                                                  roller




    • Changes            the DOM           Functions/Params
                                             •
    • Delegates          DOM events
                                                 – extend
                                             •   – constructor / initialize
                                             •   – el
                                             •   – $ (jQuery or Zepto)
                                             •   – render

    • Subscribes  Model/Collection           •   – remove
                                             •   – make
                                             •   – delegateEvents

        change events




Freitag, 11. März 2011
THE CONTROLLER ngine
                                      e rou t i n g- e
                                                                   or t h

                         var Workspace = Backbone.Controller.extend({

                         !     routes: {
                         !     !    "help":! !  !     !   !    "help",! !   // #help
                         !     !    "search/:name":! !    !    "search",!
                                                                        !   // #search/serrynaimo
                                 !  "search/:name/t:tweet":!   "search"!!   // #search/serrynaimo/t36732
                             ! },
                         !
                          ! help: function() {
                         ! !      ...
                          ! },

                          ! search: function(name, tweet) {
                         ! !     ...
                          ! }

                         });

                         new Workspace();
                         Backbone.history.start(); ! !    !    !   !    !   // Start url-change listener



Freitag, 11. März 2011
THE CONTROLLER ngine
                                    e rou t i n g- e
                                           or t h


    • Useful     to initiate application
         states like
         window.location.hash = "help";             Functions/Params
                                                     •   - extend
                                                     •
    • Enables   go back/forward
                                                         – routes
                                                     •   – constructor / initialize
                                                     •   – route

         browser functionality                       •   – saveLocation




    • Makes   application states
         bookmarkable


Freitag, 11. März 2011
DEMO


                         Download files here



Freitag, 11. März 2011
WHAT ELSE?

             • Make      many small JavaScript files for big dev teams

             • Comment       your code (e.g. yDoc compatible)

             • Works      absolutely great with html5boilerplate.com




Freitag, 11. März 2011
WE’RE HIRING!
                Mail me: thomas@adzcentral.com




                          @SERRYNAIMO
                         for JavaScript related fuzziness



Freitag, 11. März 2011

More Related Content

Recently uploaded

Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUK Journal
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsJoaquim Jorge
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century educationjfdjdjcjdnsjd
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAndrey Devyatkin
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CVKhem
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...apidays
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfhans926745
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 

Recently uploaded (20)

Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdf
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 

Featured

AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfmarketingartwork
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024Neil Kimberley
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)contently
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024Albert Qian
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsKurio // The Social Media Age(ncy)
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Search Engine Journal
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summarySpeakerHub
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next Tessa Mero
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentLily Ray
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best PracticesVit Horky
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project managementMindGenius
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...RachelPearson36
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Applitools
 
12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at WorkGetSmarter
 

Featured (20)

AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
 
Skeleton Culture Code
Skeleton Culture CodeSkeleton Culture Code
Skeleton Culture Code
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
 
12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work
 
ChatGPT webinar slides
ChatGPT webinar slidesChatGPT webinar slides
ChatGPT webinar slides
 
More than Just Lines on a Map: Best Practices for U.S Bike Routes
More than Just Lines on a Map: Best Practices for U.S Bike RoutesMore than Just Lines on a Map: Best Practices for U.S Bike Routes
More than Just Lines on a Map: Best Practices for U.S Bike Routes
 

Backbone.js - A brief introduction

  • 1. CLIENT-SIDE MVC A brief introduction by Thomas Gorissen Freitag, 11. März 2011
  • 2. ME? 1996 • <blink>Hello World</blink> • “WebMaster” • JS/PHP 1999 • Starcraft http://thomasgorissen.com • C# .NET / Forms 2005 • Ruby • ASP MVC 2010 • JS Freitag, 11. März 2011
  • 3. is • Model/View/Controller • Structure provider Javascript Framework • RESTful JSON Connector • Released 13th Oct 2010 • Hash-Routing Engine • @DocumentCloud project • Event-driven • MIT licensed and on GitHub • Lightweight (6.9kb) Freitag, 11. März 2011
  • 4. is not • DOM Accessor • Animation toolkit • Control suite • All in wonder package Freitag, 11. März 2011
  • 5. WHAT IS IT FOR? All Client-Side Rendered Applications Freitag, 11. März 2011
  • 6. AHA, HOW IS THAT? • If you do a lot of JavaScript, things tend to Model Controller get messy! • Backbone provides a way to organize your code, by View using the MVC pattern • Only the View accesses the DOM (e.g. with DOM jQuery, Zepto, ...) Freitag, 11. März 2011
  • 7. ALTHOUGH... outi neng- R Controller ngi Model • ... it’s a bit wrongly labeled + Collection E •I call it a “dirty” MVC ConViewoller tr iew VDOM Freitag, 11. März 2011
  • 8. THE MODEL var Tweet = Backbone.Model.extend({ ! // Overrides ! initialize: function(params) { ! ! if(params.id && !params.text) ! ! ! this.fetch(); ! }, ! ! url: function() { ! ! return "http://twitter.com/statuses/show/" + this.id +".json"; ! }, ! ! defaults: {! ! ! highlighted: false ! }, ! ! // Custom function ! highlight: function() { ! ! this.set({ ! ! ! highlighted: !this.get("highlighted") ! ! }); ! } }); Freitag, 11. März 2011
  • 9. THE MODEL Functions/Params • Easy to auto generate • • – extend – constructor / initialize • – get • – escape • – set • Holds data better then the • • – unset – clear DOM • • • – id – cid – attributes • – defaults • - toJSON • Throws change events • • – fetch – save • – destroy • – validate • – url • Can connect to a URL to • • – parse – clone populate from or persist to • – isNew • – change • – hasChanged the server • • – changedAttributes – previous • – previousAttributes Freitag, 11. März 2011
  • 10. THE COLLECTION var UserTweets = Backbone.Collection.extend({ ! // Overrides ! model: Tweet, ! ! url: function() { ! ! return "http://twitter.com/statuses/user_timeline/" + this.user + ".json?count=10"; ! }, ! ! // Custom function ! highlighted: function() { ! return this.filter(function(tweet) { ! ! return tweet.get('highlighted'); ! }); } }); Freitag, 11. März 2011
  • 11. THE COLLECTION • Easy to auto generate, as well Functions/Params • – extend ◦ forEach (each) • – model ◦ map • ◦ reduce (foldl, inject) • For bulk handling model – constructor / initialize • – models ◦ reduceRight (foldr) • – toJSON ◦ find (detect) objects • • – Underscore Methods (25) – add ◦ ◦ filter (select) reject • – remove ◦ every (all) • – get ◦ some (any) • – getByCid include • Throws change events ◦ • – at ◦ invoke • – length ◦ max • – comparator ◦ min • – sort ◦ sortBy • • Can connect to a URL to – pluck ◦ sortedIndex • – url ◦ toArray • – parse populate from the server ◦ size • – fetch • – refresh ◦ first • – create ◦ rest ◦ last ◦ without • Tons of query functions ◦ ◦ indexOf lastIndexOf ◦ isEmpty ◦ chain Freitag, 11. März 2011
  • 12. THE VIEW or th e cont roller var TweetView = Backbone.View.extend({ ! ! initialize: function() { ! ! _.bindAll(this, "render"); ! ! this.model.bind("change", this.render); ! }, ! ! ! events: { ! ! "click": "highlight" ! }, ! ! render: function() { ! ! this.el = this.make("li", { ! ! ! className: this.model.get("highlighted") ? "highlighted" : "normal" ! ! }, this.model.get("text")); ! ! return this; ! }, ! ! highlight: function() { ! ! this.model.highlight(); ! } ! }); Freitag, 11. März 2011
  • 13. THE VIEWe cont or th roller • Changes the DOM Functions/Params • • Delegates DOM events – extend • – constructor / initialize • – el • – $ (jQuery or Zepto) • – render • Subscribes Model/Collection • – remove • – make • – delegateEvents change events Freitag, 11. März 2011
  • 14. THE CONTROLLER ngine e rou t i n g- e or t h var Workspace = Backbone.Controller.extend({ ! routes: { ! ! "help":! ! ! ! ! "help",! ! // #help ! ! "search/:name":! ! ! "search",! ! // #search/serrynaimo ! "search/:name/t:tweet":! "search"!! // #search/serrynaimo/t36732 ! }, ! ! help: function() { ! ! ... ! }, ! search: function(name, tweet) { ! ! ... ! } }); new Workspace(); Backbone.history.start(); ! ! ! ! ! ! // Start url-change listener Freitag, 11. März 2011
  • 15. THE CONTROLLER ngine e rou t i n g- e or t h • Useful to initiate application states like window.location.hash = "help"; Functions/Params • - extend • • Enables go back/forward – routes • – constructor / initialize • – route browser functionality • – saveLocation • Makes application states bookmarkable Freitag, 11. März 2011
  • 16. DEMO Download files here Freitag, 11. März 2011
  • 17. WHAT ELSE? • Make many small JavaScript files for big dev teams • Comment your code (e.g. yDoc compatible) • Works absolutely great with html5boilerplate.com Freitag, 11. März 2011
  • 18. WE’RE HIRING! Mail me: thomas@adzcentral.com @SERRYNAIMO for JavaScript related fuzziness Freitag, 11. März 2011