SlideShare a Scribd company logo
INTRODUCTION
    THO VO
PLAN

1.   Introduction.
2.   MVC and other models in JavaScript.
3.   Third party library for Backbone.
4.   Model with Backbone.
5.   Collection with Backbone.
6.   View with Backbone.
7.   Demo.
8.   Question and Answer?
INTRODUCTION

• JavaScript found in 1995(stable 1.8.5 in 2011).
• JavaScript frameworks:
  •   MochiKit(2008).
  •   Rico(2009).
  •   YUI(2011).
  •   Ext JS(2011).
  •   Dojo(2011).
  •   Echo3(2011).
  •   jQuery(2012).
  •   …and other frameworks here.
COMPARISON

                 jQuery        Ext JS     YUI
Files            1             1          1
.js (LOC)        9047          13471      10526


   •    Is it easy to read?
   •    Is it easy to upgrade?
   •    How can I add a new feature?
   •    Does these library support OOP?
   •    3 layers?
   •    MVC?
   •  ‘spaghetti         ’ code
COMPARISON( CONT. )

• jQuery, Ext JS, YUI…write code focus on functions,
  these library provides api and the users use these
  functions to achieve what they want.
  • YUI API.
  • jQuery API.
  • Ext JS API.
WHY USE THIS?

• A MVC like pattern to keep code clean.
• A templating language to easily render view
  element.
• A better way to manage events and callbacks.
• A way to preserver back button.
• Easy for testing.
PLAN

1.   Introduction.
2.   MVC and other models in JavaScript.
3.   Third party library for Backbone.
4.   Model with Backbone.
5.   Collection with Backbone.
6.   View with Backbone.
7.   Demo.
8.   Question and Answer?
MVC AND OTHER MODELS IN
            JAVASCRIPT.


•   MV*
•   MVC
•   MVP
•   MVVM
•   …
FRAMEWORKS

•   Backbone.js
•   Sprout Core 1.x
•   Sammy.js
•   Spine.js
•   Cappuccino
•   Knockout.js
•   JavaScript MVC
•   Google Web Toolkit
•   Batman.js
PLAN

1.   Introduction.
2.   MVC and other models in JavaScript.
3.   Third party library for Backbone.
4.   Model with Backbone.
5.   Collection with Backbone.
6.   View with Backbone.
7.   Demo.
8.   Question and Answer?
THIRD PARTY LIBRARY FOR BACKBONE.

• Selector:
  • jQuery
  • YUI
  • Zepto
• Template:
  •   Underscore(hard dependency)
  •   Handlebar
  •   Tempo
  •   Mustache
ARCHITECT OF A BACKBONE PROJECT

• Assets: CSS, images, third party JavaScript library…
• Modules: Our source, view.js, model.js
• Have more directories when project come
  larger…
HTML
1.    <!doctype html>
2.    <html lang="en">
3.    <head>
4.        <meta charset="utf-8">
5.        <meta http-equiv="X-UA-Comptatible" content="IE=edge,chrome=1">
6.        <title>Backbone.js</title>
7.        <link rel="stylesheet" href="assets/css/main.css">
8.    </head>
9.    <body>
10.       <div id="content">
11.       <!-- Content goes here -->
12.       </div>
13.       <!-- Libraries, follow this order -->
14.       <script type="text/javascript" src="assets/js/libs/jquery.min.js"></script>
15.       <script type="text/javascript" src="assets/js/libs/underscore-min.js"></script>
16.       <script type="text/javascript" src="assets/js/libs/backbone-min.js"></script>
17.       <!-- Application JavaScript -->
18.       <script type="text/javascript" src="src/app.js"></script>
19.   </body>
20.   </html>
NAMESPACE
1.    var app = {
2.        // Classes
3.        Collections: {},
4.        Models: {},
5.        Views: {},
6.        // Instances
7.        collections: {},
8.        models: {},
9.        views: {},
10.       init: function () {
11.           // Constructor
12.       }
13.   };
14.   $(document).ready(function () {
15.       // Run on the first time the document has been loaded
16.       app.init();
17.   });
MODULES

• src/modules/views.js :
1. app.Views.main = Backbone.View.extend({
2.     initialize: function () {
3.         // View init
4.         console.log('Main view initialized !');
5.     }
6. });
• Add view in app.js
• src/app.js :
1. init: function () {
2.     // Init
3.     this.views.main = new this.Views.main();
4. }
PLAN

1.   Introduction.
2.   MVC and other models in JavaScript.
3.   Third party library for Backbone.
4.   Model with Backbone.
5.   Collection with Backbone.
6.   View with Backbone.
7.   Demo.
8.   Question and Answer?
MODEL

• Manage data(CVDP).
• Change the data of a model  notify changes to
  view
1. var Photo = Backbone.Model.extend({
2.      // Default attributes for the photo
3.      defaults: {
4.          src: "placeholder.jpg",
5.          caption: "A default image",
6.          viewed: false
7.      },
8.      // Ensure that each photo created has an `src`.
9.      initialize: function () {
10.         this.set({ "src": this.defaults.src });
11.     }
12. });
MODEL(CONT.)

•   Validation data.
•   Persistence data on server.
•   Allow multiple views on a model.
•   …
PLAN

1.   Introduction.
2.   MVC and other models in JavaScript.
3.   Third party library for Backbone.
4.   Model with Backbone.
5.   Collection with Backbone.
6.   View with Backbone.
7.   Demo.
8.   Question and Answer?
COLLECTION

•   Group models .
•   Trigger events like add/remove/refresh.
•   Can fetch models from a given URL.
•   Can keep the model sorted.
•   Write application logic based on notifications from
    the group should any model it contains be
    changed.
    needn’t to watch every individual model instance.
COLLECTION(CONT.)

1.var PhotoGallery = Backbone.Collection.extend({
2.     // Reference to this collection's model.
3.     model: Photo,
4.     // Filter down the list of all photos
5.     // that have been viewed
6.     viewed: function() {
7.         return this.filter(function(photo){
8.            return photo.get('viewed');
9.         });
10.     },
11.     // Filter down the list to only photos that
12.     // have not yet been viewed
13.     unviewed: function() {
14.       return this.without.apply(this, this.viewed());
15.     }
16.});
PLAN

1.   Introduction.
2.   MVC and other models in JavaScript.
3.   Third party library for Backbone.
4.   Model with Backbone.
5.   Collection with Backbone.
6.   View with Backbone.
7.   Demo.
8.   Question and Answer?
VIEW

• Visual representation of models .
• Observes a model and is notified when the model
  changes  update accordingly.
• View in Backbone isn’t a CONTROLLER , it just can
  add an event listener to delegate handling the
  behavior to the controller.
1.var buildPhotoView = function( photoModel, photoController ){
2.    var base         = document.createElement('div'),
3.         photoEl     = document.createElement('div');
4.     base.appendChild(photoEl);
5.     var render= function(){
6.         // We use a templating library such as Underscore
7.         // templating which generates the HTML for our photo entry
8.        photoEl.innerHTML = _.template('photoTemplate', {src: photoModel.getSrc()});
9.     }
10.     photoModel.addSubscriber( render );
11.     photoEl.addEventListener('click', function(){
12.         photoController.handleEvent('click', photoModel );
13.     });
14.     var show = function(){
15.         photoEl.style.display = '';
16.     }
17.     var hide = function(){
18.         photoEl.style.display = 'none';
19.     }
20.     return{
21.         showView: show,
22.         hideView: hide
23.     }
24.}
CONTROLLER

• Backbone didn’t actually provide a Controller.
• In Backbone, View and Router does a little similar to
  a Controller.
• Router binds the event for a Model and have View
  for respond to this event.
1.   var PhotoRouter = Backbone.Router.extend({
2.     routes: { "photos/:id": "route" },
3.     route: function(id) {
4.       var item = photoCollection.get(id);
5.       var view = new PhotoView({ model: item });
6.       something.html( view.render().el );
7.     }
8.   }):
BENEFITS OF MVC

1. Easier overall maintenance.
2. Decoupling models and views  easy to write unit
   test and business logic.
3. Duplication of low-level model and controller
   code is eliminated across the application.
4. Work simultaneously between core logic and user
   interface.
NOTES

• Core components: Model, View, Collection, Router.
• Complete documentation.
• Used by large companies such as SoundCloud and
  Foursquare.
• Event-driven communication.
• No default templating engine.
• Clear and flexible conventions for structuring
  applications.
• …
PLUGIN

• Deeply nested models:
  • Backbone Relational
  • Ligament
• Store data:
  • Backbone localStorage
  • Small Backbone ORM
• View:
  • LayoutManager
  • Backbone.Marionette
• More at here.
DEMO

• Other demo can view here:
 •   Todos
 •   Backbone Google Book
 •   Todos of Niquet
 •   …
QUESTION AND ANSWER
THANK YOU FOR YOUR ATTENTIONS




             !

More Related Content

PDF
Backbone.js
Omnia Helmi
 
PDF
Packing it all: JavaScript module bundling from 2000 to now
Derek Willian Stavis
 
PDF
Building a js widget
Tudor Barbu
 
PPTX
Testing frontends with nightwatch & saucelabs
Tudor Barbu
 
PDF
From Hacker to Programmer (w/ Webpack, Babel and React)
Joseph Chiang
 
PDF
Vue 淺談前端建置工具
andyyou
 
PDF
AngularJS Deep Dives (NYC GDG Apr 2013)
Nitya Narasimhan
 
PDF
Javascript framework and backbone
Daniel Lv
 
Backbone.js
Omnia Helmi
 
Packing it all: JavaScript module bundling from 2000 to now
Derek Willian Stavis
 
Building a js widget
Tudor Barbu
 
Testing frontends with nightwatch & saucelabs
Tudor Barbu
 
From Hacker to Programmer (w/ Webpack, Babel and React)
Joseph Chiang
 
Vue 淺談前端建置工具
andyyou
 
AngularJS Deep Dives (NYC GDG Apr 2013)
Nitya Narasimhan
 
Javascript framework and backbone
Daniel Lv
 

What's hot (20)

PPTX
Webpack
Anjali Chawla
 
KEY
Requirejs
sioked
 
PDF
Module, AMD, RequireJS
偉格 高
 
PPTX
Webpack Introduction
Anjali Chawla
 
PPTX
An Intro into webpack
Squash Apps Pvt Ltd
 
PDF
Webpack Tutorial, Uppsala JS
Emil Öberg
 
PDF
Modern frontend development with VueJs
Tudor Barbu
 
PDF
Ember.js - A JavaScript framework for creating ambitious web applications
Juliana Lucena
 
PDF
Building a Startup Stack with AngularJS
FITC
 
PDF
Workshop 9: BackboneJS y patrones MVC
Visual Engineering
 
PDF
The Art of AngularJS - DeRailed 2014
Matt Raible
 
PDF
Introduction to AngularJS
Jussi Pohjolainen
 
PDF
Requirejs
Jason Lotito
 
PDF
Webpack DevTalk
Alessandro Bellini
 
PPT
Managing JavaScript Dependencies With RequireJS
Den Odell
 
PDF
JavaScript Dependencies, Modules & Browserify
Johan Nilsson
 
PDF
Introduction to AJAX In WordPress
Caldera Labs
 
PDF
webpack 101 slides
mattysmith
 
PDF
Javascript Test Automation Workshop (21.08.2014)
Deutsche Post
 
PDF
Angular js vs. Facebook react
Keyup
 
Webpack
Anjali Chawla
 
Requirejs
sioked
 
Module, AMD, RequireJS
偉格 高
 
Webpack Introduction
Anjali Chawla
 
An Intro into webpack
Squash Apps Pvt Ltd
 
Webpack Tutorial, Uppsala JS
Emil Öberg
 
Modern frontend development with VueJs
Tudor Barbu
 
Ember.js - A JavaScript framework for creating ambitious web applications
Juliana Lucena
 
Building a Startup Stack with AngularJS
FITC
 
Workshop 9: BackboneJS y patrones MVC
Visual Engineering
 
The Art of AngularJS - DeRailed 2014
Matt Raible
 
Introduction to AngularJS
Jussi Pohjolainen
 
Requirejs
Jason Lotito
 
Webpack DevTalk
Alessandro Bellini
 
Managing JavaScript Dependencies With RequireJS
Den Odell
 
JavaScript Dependencies, Modules & Browserify
Johan Nilsson
 
Introduction to AJAX In WordPress
Caldera Labs
 
webpack 101 slides
mattysmith
 
Javascript Test Automation Workshop (21.08.2014)
Deutsche Post
 
Angular js vs. Facebook react
Keyup
 
Ad

Similar to Backbone.js (20)

PPTX
jquery summit presentation for large scale javascript applications
DivyanshGupta922023
 
PDF
Backbone.js
Ivano Malavolta
 
PPTX
BackboneJS Training - Giving Backbone to your applications
Joseph Khan
 
PPTX
SharePoint Framework, Angular and Azure Functions
Sébastien Levert
 
PDF
Backbone JS for mobile apps
Ivano Malavolta
 
PDF
WebNet Conference 2012 - Designing complex applications using html5 and knock...
Fabio Franzini
 
PDF
Developing maintainable Cordova applications
Ivano Malavolta
 
PDF
Angular or Backbone: Go Mobile!
Doris Chen
 
PDF
[2015/2016] Backbone JS
Ivano Malavolta
 
PPTX
MVC & backbone.js
Mohammed Arif
 
PPT
Introduction to design_patterns
amitarcade
 
PPTX
MV* presentation frameworks in Javascript: en garde, pret, allez!
Roberto Messora
 
PPTX
Plone FSR
fulv
 
PDF
An overview of Scalable Web Application Front-end
Saeid Zebardast
 
PPTX
ZZ BC#7 asp.net mvc practice and guideline by NineMvp
Chalermpon Areepong
 
TXT
Readme
Rizwan Siddiquee
 
PPT
Angular js
Hritesh Saha
 
PPT
Angular js
yogi_solanki
 
PPTX
Angular JS, A dive to concepts
Abhishek Sur
 
PDF
3(3,4,5)-Encapưbtertbtrwertbewtrsulation.pdf
2300MaiTnPht
 
jquery summit presentation for large scale javascript applications
DivyanshGupta922023
 
Backbone.js
Ivano Malavolta
 
BackboneJS Training - Giving Backbone to your applications
Joseph Khan
 
SharePoint Framework, Angular and Azure Functions
Sébastien Levert
 
Backbone JS for mobile apps
Ivano Malavolta
 
WebNet Conference 2012 - Designing complex applications using html5 and knock...
Fabio Franzini
 
Developing maintainable Cordova applications
Ivano Malavolta
 
Angular or Backbone: Go Mobile!
Doris Chen
 
[2015/2016] Backbone JS
Ivano Malavolta
 
MVC & backbone.js
Mohammed Arif
 
Introduction to design_patterns
amitarcade
 
MV* presentation frameworks in Javascript: en garde, pret, allez!
Roberto Messora
 
Plone FSR
fulv
 
An overview of Scalable Web Application Front-end
Saeid Zebardast
 
ZZ BC#7 asp.net mvc practice and guideline by NineMvp
Chalermpon Areepong
 
Angular js
Hritesh Saha
 
Angular js
yogi_solanki
 
Angular JS, A dive to concepts
Abhishek Sur
 
3(3,4,5)-Encapưbtertbtrwertbewtrsulation.pdf
2300MaiTnPht
 
Ad

Recently uploaded (20)

PDF
Review of Related Literature & Studies.pdf
Thelma Villaflores
 
PDF
What is CFA?? Complete Guide to the Chartered Financial Analyst Program
sp4989653
 
PDF
BÀI TẬP TEST BỔ TRỢ THEO TỪNG CHỦ ĐỀ CỦA TỪNG UNIT KÈM BÀI TẬP NGHE - TIẾNG A...
Nguyen Thanh Tu Collection
 
PPTX
An introduction to Prepositions for beginners.pptx
drsiddhantnagine
 
PPTX
Kanban Cards _ Mass Action in Odoo 18.2 - Odoo Slides
Celine George
 
PPTX
Introduction to pediatric nursing in 5th Sem..pptx
AneetaSharma15
 
PPTX
HISTORY COLLECTION FOR PSYCHIATRIC PATIENTS.pptx
PoojaSen20
 
PPTX
How to Close Subscription in Odoo 18 - Odoo Slides
Celine George
 
PPTX
Artificial-Intelligence-in-Drug-Discovery by R D Jawarkar.pptx
Rahul Jawarkar
 
PPTX
Cleaning Validation Ppt Pharmaceutical validation
Ms. Ashatai Patil
 
PPTX
Dakar Framework Education For All- 2000(Act)
santoshmohalik1
 
PPTX
family health care settings home visit - unit 6 - chn 1 - gnm 1st year.pptx
Priyanshu Anand
 
PPTX
Command Palatte in Odoo 18.1 Spreadsheet - Odoo Slides
Celine George
 
PPTX
Care of patients with elImination deviation.pptx
AneetaSharma15
 
DOCX
SAROCES Action-Plan FOR ARAL PROGRAM IN DEPED
Levenmartlacuna1
 
PPTX
HEALTH CARE DELIVERY SYSTEM - UNIT 2 - GNM 3RD YEAR.pptx
Priyanshu Anand
 
PPTX
Virus sequence retrieval from NCBI database
yamunaK13
 
PPTX
How to Track Skills & Contracts Using Odoo 18 Employee
Celine George
 
PPTX
Gupta Art & Architecture Temple and Sculptures.pptx
Virag Sontakke
 
PPTX
An introduction to Dialogue writing.pptx
drsiddhantnagine
 
Review of Related Literature & Studies.pdf
Thelma Villaflores
 
What is CFA?? Complete Guide to the Chartered Financial Analyst Program
sp4989653
 
BÀI TẬP TEST BỔ TRỢ THEO TỪNG CHỦ ĐỀ CỦA TỪNG UNIT KÈM BÀI TẬP NGHE - TIẾNG A...
Nguyen Thanh Tu Collection
 
An introduction to Prepositions for beginners.pptx
drsiddhantnagine
 
Kanban Cards _ Mass Action in Odoo 18.2 - Odoo Slides
Celine George
 
Introduction to pediatric nursing in 5th Sem..pptx
AneetaSharma15
 
HISTORY COLLECTION FOR PSYCHIATRIC PATIENTS.pptx
PoojaSen20
 
How to Close Subscription in Odoo 18 - Odoo Slides
Celine George
 
Artificial-Intelligence-in-Drug-Discovery by R D Jawarkar.pptx
Rahul Jawarkar
 
Cleaning Validation Ppt Pharmaceutical validation
Ms. Ashatai Patil
 
Dakar Framework Education For All- 2000(Act)
santoshmohalik1
 
family health care settings home visit - unit 6 - chn 1 - gnm 1st year.pptx
Priyanshu Anand
 
Command Palatte in Odoo 18.1 Spreadsheet - Odoo Slides
Celine George
 
Care of patients with elImination deviation.pptx
AneetaSharma15
 
SAROCES Action-Plan FOR ARAL PROGRAM IN DEPED
Levenmartlacuna1
 
HEALTH CARE DELIVERY SYSTEM - UNIT 2 - GNM 3RD YEAR.pptx
Priyanshu Anand
 
Virus sequence retrieval from NCBI database
yamunaK13
 
How to Track Skills & Contracts Using Odoo 18 Employee
Celine George
 
Gupta Art & Architecture Temple and Sculptures.pptx
Virag Sontakke
 
An introduction to Dialogue writing.pptx
drsiddhantnagine
 

Backbone.js

  • 1. INTRODUCTION THO VO
  • 2. PLAN 1. Introduction. 2. MVC and other models in JavaScript. 3. Third party library for Backbone. 4. Model with Backbone. 5. Collection with Backbone. 6. View with Backbone. 7. Demo. 8. Question and Answer?
  • 3. INTRODUCTION • JavaScript found in 1995(stable 1.8.5 in 2011). • JavaScript frameworks: • MochiKit(2008). • Rico(2009). • YUI(2011). • Ext JS(2011). • Dojo(2011). • Echo3(2011). • jQuery(2012). • …and other frameworks here.
  • 4. COMPARISON jQuery Ext JS YUI Files 1 1 1 .js (LOC) 9047 13471 10526 • Is it easy to read? • Is it easy to upgrade? • How can I add a new feature? • Does these library support OOP? • 3 layers? • MVC? •  ‘spaghetti ’ code
  • 5. COMPARISON( CONT. ) • jQuery, Ext JS, YUI…write code focus on functions, these library provides api and the users use these functions to achieve what they want. • YUI API. • jQuery API. • Ext JS API.
  • 6. WHY USE THIS? • A MVC like pattern to keep code clean. • A templating language to easily render view element. • A better way to manage events and callbacks. • A way to preserver back button. • Easy for testing.
  • 7. PLAN 1. Introduction. 2. MVC and other models in JavaScript. 3. Third party library for Backbone. 4. Model with Backbone. 5. Collection with Backbone. 6. View with Backbone. 7. Demo. 8. Question and Answer?
  • 8. MVC AND OTHER MODELS IN JAVASCRIPT. • MV* • MVC • MVP • MVVM • …
  • 9. FRAMEWORKS • Backbone.js • Sprout Core 1.x • Sammy.js • Spine.js • Cappuccino • Knockout.js • JavaScript MVC • Google Web Toolkit • Batman.js
  • 10. PLAN 1. Introduction. 2. MVC and other models in JavaScript. 3. Third party library for Backbone. 4. Model with Backbone. 5. Collection with Backbone. 6. View with Backbone. 7. Demo. 8. Question and Answer?
  • 11. THIRD PARTY LIBRARY FOR BACKBONE. • Selector: • jQuery • YUI • Zepto • Template: • Underscore(hard dependency) • Handlebar • Tempo • Mustache
  • 12. ARCHITECT OF A BACKBONE PROJECT • Assets: CSS, images, third party JavaScript library… • Modules: Our source, view.js, model.js • Have more directories when project come larger…
  • 13. HTML 1. <!doctype html> 2. <html lang="en"> 3. <head> 4. <meta charset="utf-8"> 5. <meta http-equiv="X-UA-Comptatible" content="IE=edge,chrome=1"> 6. <title>Backbone.js</title> 7. <link rel="stylesheet" href="assets/css/main.css"> 8. </head> 9. <body> 10. <div id="content"> 11. <!-- Content goes here --> 12. </div> 13. <!-- Libraries, follow this order --> 14. <script type="text/javascript" src="assets/js/libs/jquery.min.js"></script> 15. <script type="text/javascript" src="assets/js/libs/underscore-min.js"></script> 16. <script type="text/javascript" src="assets/js/libs/backbone-min.js"></script> 17. <!-- Application JavaScript --> 18. <script type="text/javascript" src="src/app.js"></script> 19. </body> 20. </html>
  • 14. NAMESPACE 1. var app = { 2. // Classes 3. Collections: {}, 4. Models: {}, 5. Views: {}, 6. // Instances 7. collections: {}, 8. models: {}, 9. views: {}, 10. init: function () { 11. // Constructor 12. } 13. }; 14. $(document).ready(function () { 15. // Run on the first time the document has been loaded 16. app.init(); 17. });
  • 15. MODULES • src/modules/views.js : 1. app.Views.main = Backbone.View.extend({ 2. initialize: function () { 3. // View init 4. console.log('Main view initialized !'); 5. } 6. }); • Add view in app.js • src/app.js : 1. init: function () { 2. // Init 3. this.views.main = new this.Views.main(); 4. }
  • 16. PLAN 1. Introduction. 2. MVC and other models in JavaScript. 3. Third party library for Backbone. 4. Model with Backbone. 5. Collection with Backbone. 6. View with Backbone. 7. Demo. 8. Question and Answer?
  • 17. MODEL • Manage data(CVDP). • Change the data of a model  notify changes to view 1. var Photo = Backbone.Model.extend({ 2. // Default attributes for the photo 3. defaults: { 4. src: "placeholder.jpg", 5. caption: "A default image", 6. viewed: false 7. }, 8. // Ensure that each photo created has an `src`. 9. initialize: function () { 10. this.set({ "src": this.defaults.src }); 11. } 12. });
  • 18. MODEL(CONT.) • Validation data. • Persistence data on server. • Allow multiple views on a model. • …
  • 19. PLAN 1. Introduction. 2. MVC and other models in JavaScript. 3. Third party library for Backbone. 4. Model with Backbone. 5. Collection with Backbone. 6. View with Backbone. 7. Demo. 8. Question and Answer?
  • 20. COLLECTION • Group models . • Trigger events like add/remove/refresh. • Can fetch models from a given URL. • Can keep the model sorted. • Write application logic based on notifications from the group should any model it contains be changed. needn’t to watch every individual model instance.
  • 21. COLLECTION(CONT.) 1.var PhotoGallery = Backbone.Collection.extend({ 2. // Reference to this collection's model. 3. model: Photo, 4. // Filter down the list of all photos 5. // that have been viewed 6. viewed: function() { 7. return this.filter(function(photo){ 8. return photo.get('viewed'); 9. }); 10. }, 11. // Filter down the list to only photos that 12. // have not yet been viewed 13. unviewed: function() { 14. return this.without.apply(this, this.viewed()); 15. } 16.});
  • 22. PLAN 1. Introduction. 2. MVC and other models in JavaScript. 3. Third party library for Backbone. 4. Model with Backbone. 5. Collection with Backbone. 6. View with Backbone. 7. Demo. 8. Question and Answer?
  • 23. VIEW • Visual representation of models . • Observes a model and is notified when the model changes  update accordingly. • View in Backbone isn’t a CONTROLLER , it just can add an event listener to delegate handling the behavior to the controller.
  • 24. 1.var buildPhotoView = function( photoModel, photoController ){ 2. var base = document.createElement('div'), 3. photoEl = document.createElement('div'); 4. base.appendChild(photoEl); 5. var render= function(){ 6. // We use a templating library such as Underscore 7. // templating which generates the HTML for our photo entry 8. photoEl.innerHTML = _.template('photoTemplate', {src: photoModel.getSrc()}); 9. } 10. photoModel.addSubscriber( render ); 11. photoEl.addEventListener('click', function(){ 12. photoController.handleEvent('click', photoModel ); 13. }); 14. var show = function(){ 15. photoEl.style.display = ''; 16. } 17. var hide = function(){ 18. photoEl.style.display = 'none'; 19. } 20. return{ 21. showView: show, 22. hideView: hide 23. } 24.}
  • 25. CONTROLLER • Backbone didn’t actually provide a Controller. • In Backbone, View and Router does a little similar to a Controller. • Router binds the event for a Model and have View for respond to this event. 1. var PhotoRouter = Backbone.Router.extend({ 2. routes: { "photos/:id": "route" }, 3. route: function(id) { 4. var item = photoCollection.get(id); 5. var view = new PhotoView({ model: item }); 6. something.html( view.render().el ); 7. } 8. }):
  • 26. BENEFITS OF MVC 1. Easier overall maintenance. 2. Decoupling models and views  easy to write unit test and business logic. 3. Duplication of low-level model and controller code is eliminated across the application. 4. Work simultaneously between core logic and user interface.
  • 27. NOTES • Core components: Model, View, Collection, Router. • Complete documentation. • Used by large companies such as SoundCloud and Foursquare. • Event-driven communication. • No default templating engine. • Clear and flexible conventions for structuring applications. • …
  • 28. PLUGIN • Deeply nested models: • Backbone Relational • Ligament • Store data: • Backbone localStorage • Small Backbone ORM • View: • LayoutManager • Backbone.Marionette • More at here.
  • 29. DEMO • Other demo can view here: • Todos • Backbone Google Book • Todos of Niquet • …
  • 31. THANK YOU FOR YOUR ATTENTIONS !

Editor's Notes

  • #11: Models manage the data for an application. They are concerned with neither the user-interface nor presentation layers but instead represent unique forms of data that an application may require. When a model changes (e.g when it is updated), it will typically notify its observers (e.g views, a concept we will cover shortly) that a change has occurred so that they may react accordingly.To understand models further, let us imagine we have a JavaScript photo gallery application. In a photo gallery, the concept of a photo would merit its own model as it represents a unique kind of domain-specific data. Such a model may contain related attributes such as a caption, image source and additional meta-data. A specific photo would be stored in an instance of a model and a model may also be reusable. Below we can see an example of a very simplistic model implemented using Backbone.The built-in capabilities of models vary across frameworks, however it is quite common for them to support validation of attributes, where attributes represent the properties of the model, such as a model identifier. When using models in real-world applications we generally also desire model persistence. Persistence allows us to edit and update models with the knowledge that its most recent state will be saved in either: memory, in a user&apos;s localStorage data-store or synchronized with a database.In addition, a model may also have multiple views observing it. If say, our photo model contained meta-data such as its location (longitude and latitude), friends that were present in the a photo (a list of identifiers) and a list of tags, a developer may decide to provide a single view to display each of these three facets.It is not uncommon for modern MVC/MV* frameworks to provide a means to group models together (e.g in Backbone, these groups are referred to as &quot;collections&quot;). Managing models in groups allows us to write application logic based on notifications from the group should any model it contains be changed. This avoids the need to manually observe individual model instances.