SlideShare ist ein Scribd-Unternehmen logo
1 von 59
http://canjs.us
                      @canjsus




THE BEST
OF BOTH WORLDS
Brian Moschel
@bitovi
http://bitovi.com
2010




WHY            2012

WE’RE
HERE
WE
   {
WHAT

WANT
       Small
       Fast
       Best Practices
       Productivity
       Easy to Learn
THE TWO WORLDS

   Light              Heavy

Easy to Learn      Live Binding
 Small Size     Computed Properties
 Basic MVC        Memory Safety
THE BEST OF BOTH WORLDS



 Easy to Learn          Live Binding
 Small Size      Computed Properties
 Basic MVC           Memory Safety
THE BEST OF BOTH WORLDS



 Easy to Learn          Live Binding
 Small Size      Computed Properties
 Basic MVC           Memory Safety
THE BEST OF BOTH WORLDS




 R&B              Hip Hop
THE BEST OF BOTH WORLDS




 R&B              Hip Hop
WHERE
IT CAME FROM...



                  StealJS
WHAT’S
 INSIDE
          {
          • can.Construct
          • can.Observe
          • can.Model
          • can.Control
          • can.view
          • can.EJS
          • can.route
JUST SHOW
ME A MATRIX
ALREADY
Download Size           8.97k   37k    13k   9.47k
    Small
                     Download Builder

                       Live Bind Perf           14     38     63     50
 Fast- JSPerf
                    Control Initialization     135     81     n/a   135
                      MVC Separation

                       Memory Safety
Best Practices
                     REST Service Layer

                 Routing Logic in Controller

                        Global Store

                        Live Binding

Productivity             Deferreds

                   Computed Properties

                    Partial View Support

                 Perceived Learning Curve      low     high   low   low
Easy to Learn
                      Library Agnostic
DEMO
BEST
PRACTICES
     MVC Separation

     Memory Safety

   REST Service Layer

Routing Logic in Controller
BEST PRACTICES
Model - View - Controller

 can.Construct    can.Control   can.view



  can.Observe      can.route    can.EJS



   can.Model
BEST PRACTICES
can.Model
 var Todo = can.Model({
   findAll : '/todo',
   findOne : '/todo/{id}',
   destroy : 'POST /todo/destroy/{id}',
   update : 'POST /todo/{id}',
   create : '/todo'
 },{});

  Todo.findOne({id: 5}, function( todo ) {
    todo.attr('name')
  });
BEST PRACTICES
can.Model and can.Observe
  var person =
    new can.Observe({ name: 'josh'});

  person.bind('name’, function(ev,newVal,oldVal){
   newVal //-> 'Josh Dean'
   oldVal //-> 'josh'
  });

  person.attr('name') //-> 'josh'
  person.name //-> 'josh'
  person.attr('name','Josh Dean’);
BEST PRACTICES
can.Control
  var Tabs = can.Control({
    init: function( el ) {
       // show first tab
    },
    'li click': function( el, ev ) {
       // hide other tabs
       // show selected tab
    }
  });

  new Tabs('#tabs');
BEST PRACTICES
can.view and can.EJS
 <script type='text/ejs' id='messageEJS'>
   <h1><%= message %></h1>
 </script>

  can.view('messageEJS', {
    message : 'Hello World'
  }) //-> frag <h1>Hello World</h1>
BEST PRACTICES
Memory Leaks




$('#undo').bind('mouseenter',function(){
   $('<div>Undo</div>').tooltipFor(this)
})
BEST PRACTICES
Memory Leaks




                      Undo




$('#undo').bind('mouseenter',function(){
   $('<div>Undo</div>').tooltipFor(this)
})
BEST PRACTICES
Memory Leaks




 $.fn.tooltipFor = function(anchor){
    var $el = this
     .appendTo(document.body)
     .offset( $(anchor).offset() )

     $(anchor).bind('mouseleave',function(ev){
        $el.remove()
     })
 }
BEST PRACTICES
Memory Leaks



                                  Undo



 $.fn.tooltipFor = function(anchor){
    var $el = this
     .appendTo(document.body)
     .offset( $(anchor).offset() )

     $(anchor).bind('mouseleave',function(ev){
        $el.remove()
     })
 }
Leaky Event Handlers: Zombies!
Leaky Event Handlers: Zombies!
BEST PRACTICES
can.Control and Templated Events

var Tooltip = can.Control({
  init: function( el, options ) {
     el.appendTo(document.body)
       .offset( $(options.anchor).offset() )
  },
  '{anchor} mouseleave': function( el, ev ) {
     this.element.remove();
  }
});

new Tooltip($('<div>Undo</div>'),{
  anchor : this
});
BEST PRACTICES
Memory Leaks

     can.Model   Non-Leaking Global Store
BEST PRACTICES
Memory Leaks

     can.Model    Non-Leaking Global Store



                      Critical


                 File Taxes

                 Write talk on CanJS

                 Emissions Test
PRODUCTIVITY
    Global Store
    Live Binding
     Deferreds
Computed Properties
Partial View Support
PRODUCTIVITY
Live Binding
 <% if( devs.attr('length') ) { %>
   <% devs.each( function( dev ) { %>
     <li><%= dev.attr('name') %></li>
   <% }) %>
 <% } else { %>
   <li>No Developers</li>
 <% } %>


 devs = new can.Observe.List(['Andy','Fred'])
 can.view('devs',{devs: devs})
PRODUCTIVITY
Live Binding

<input type='text'
  value='<%= coffee.attr("roaster") %>' />
PRODUCTIVITY
Global Store
PRODUCTIVITY
Deferreds

 can.view( 'todos/todos.ejs', {
    todos: Todo.findAll(),
    user: User.findOne( { id: 5 } )
 } )
 .then(function( frag ){
    document.getElementById( 'todos' )
            .appendChild( frag );
 })
PRODUCTIVITY
can.compute
 var Person = can.Observe({
   fullName: can.compute(function(){
      return this.attr("first") + " " +
        this.attr("last")
   })
 });

 var me = new Person({
   first: "Justin",
   last: "Meyer"
 });

 me.fullName() //-> "Justin Meyer"
 me.fullName.bind("change",
   function(ev,newVal,oldVal){ ... })
PRODUCTIVITY
Plugins

          • Validations
          • Getter / Setter
          • Attribute Converters
          • Backup / Restore
          • Super
          • Proxy
EASY

Perceived Learning Curve   low   high   low   low

    Library Agnostic
EASY   Docs!
EASY   Docs!
EASY   Docs!
EASY   Docs!
EASY   Docs!
EASY   Docs!
EASY   Docs!
EASY   Docs!
EASY   Docs!
EASY   Docs!
EASY   Library Support
FAST
   Live Bind Perf        14    38   63    50

Control Initialization   135   81   n/a   135
FAST Live Bind Perf
FASTControl Initialization
SMALL

 Download Size     8.97k   37k   13k   9.47k
Download Builder
SMALL
Download
Builder
SMALL
Download Size
 40

 30

 20

 10

  0
      BackboneJS   CanJS   KnockoutJS   BatmanJS   AngularJS   EmberJS
WHAT’S NEXT
Library-less Version

can.route Push State

Handlebars/Mustache Support
http://canjs.us
                      @canjsus




THE BEST
OF BOTH WORLDS
PRODUCTIVITY
Partial Views


  <% for( var i = 0; i < todos.length; i++ ) { %>
    <li><%== can.view.render( '/todos/todo.ejs', {
               todo: todo[ i ]
             } ) %>
    </li>
  <% } %>
PRODUCTIVITY
can.compute
 var project = new can.Observe({
   progress: 0.5
 });

 var computed = can.compute(function(val){
   if(val) {
     project.attr('progress', val / 100);
   } else {
     return project.attr('progress') * 100;
   }
 });

 new Slider({val : computed});

Weitere ähnliche Inhalte

Mehr von Brian Moschel

Comet: an Overview and a New Solution Called Jabbify
Comet: an Overview and a New Solution Called JabbifyComet: an Overview and a New Solution Called Jabbify
Comet: an Overview and a New Solution Called JabbifyBrian Moschel
 
Comet, Simplified, with Jabbify Comet Service
Comet, Simplified, with Jabbify Comet ServiceComet, Simplified, with Jabbify Comet Service
Comet, Simplified, with Jabbify Comet ServiceBrian Moschel
 
Building an App with jQuery and JAXER
Building an App with jQuery and JAXERBuilding an App with jQuery and JAXER
Building an App with jQuery and JAXERBrian Moschel
 
JavaScript Functions
JavaScript FunctionsJavaScript Functions
JavaScript FunctionsBrian Moschel
 
Basic inheritance in JavaScript
Basic inheritance in JavaScriptBasic inheritance in JavaScript
Basic inheritance in JavaScriptBrian Moschel
 
Things to avoid in JavaScript
Things to avoid in JavaScriptThings to avoid in JavaScript
Things to avoid in JavaScriptBrian Moschel
 

Mehr von Brian Moschel (12)

FuncUnit
FuncUnitFuncUnit
FuncUnit
 
Bottom Up
Bottom UpBottom Up
Bottom Up
 
Headless Js Testing
Headless Js TestingHeadless Js Testing
Headless Js Testing
 
Comet: an Overview and a New Solution Called Jabbify
Comet: an Overview and a New Solution Called JabbifyComet: an Overview and a New Solution Called Jabbify
Comet: an Overview and a New Solution Called Jabbify
 
Web 2.0 Expo Notes
Web 2.0 Expo NotesWeb 2.0 Expo Notes
Web 2.0 Expo Notes
 
Comet, Simplified, with Jabbify Comet Service
Comet, Simplified, with Jabbify Comet ServiceComet, Simplified, with Jabbify Comet Service
Comet, Simplified, with Jabbify Comet Service
 
Building an App with jQuery and JAXER
Building an App with jQuery and JAXERBuilding an App with jQuery and JAXER
Building an App with jQuery and JAXER
 
JavaScript Functions
JavaScript FunctionsJavaScript Functions
JavaScript Functions
 
Ajax3
Ajax3Ajax3
Ajax3
 
Basic inheritance in JavaScript
Basic inheritance in JavaScriptBasic inheritance in JavaScript
Basic inheritance in JavaScript
 
Things to avoid in JavaScript
Things to avoid in JavaScriptThings to avoid in JavaScript
Things to avoid in JavaScript
 
Javascript and DOM
Javascript and DOMJavascript and DOM
Javascript and DOM
 

Kürzlich hochgeladen

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
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Jeffrey Haguewood
 
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Zilliz
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
 
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
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherRemote DBA Services
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxRustici Software
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdfSandro Moreira
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamUiPathCommunity
 
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelMcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelDeepika Singh
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FMESafe Software
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesrafiqahmad00786416
 
Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityWSO2
 
Six Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal OntologySix Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal Ontologyjohnbeverley2021
 
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
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDropbox
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusZilliz
 
WSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Angeliki Cooney
 

Kürzlich hochgeladen (20)

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...
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
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
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
 
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelMcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital Adaptability
 
Six Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal OntologySix Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal Ontology
 
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
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 
WSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering Developers
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
 

CanJS: The Best of Both Worlds

Hinweis der Redaktion

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. Set out to make CanJS the best documented library.\n\nAwesome overview page with it&amp;#x2019;s sweet navigation, underlying docs for every function, method, attribute, and demo applications for each component.\n\nAnnotated Source\n\n\nAnd hire us for training, support, or development\n
  34. Set out to make CanJS the best documented library.\n\nAwesome overview page with it&amp;#x2019;s sweet navigation, underlying docs for every function, method, attribute, and demo applications for each component.\n\nAnnotated Source\n\n\nAnd hire us for training, support, or development\n
  35. Set out to make CanJS the best documented library.\n\nAwesome overview page with it&amp;#x2019;s sweet navigation, underlying docs for every function, method, attribute, and demo applications for each component.\n\nAnnotated Source\n\n\nAnd hire us for training, support, or development\n
  36. Set out to make CanJS the best documented library.\n\nAwesome overview page with it&amp;#x2019;s sweet navigation, underlying docs for every function, method, attribute, and demo applications for each component.\n\nAnnotated Source\n\n\nAnd hire us for training, support, or development\n
  37. Set out to make CanJS the best documented library.\n\nAwesome overview page with it&amp;#x2019;s sweet navigation, underlying docs for every function, method, attribute, and demo applications for each component.\n\nAnnotated Source\n\n\nAnd hire us for training, support, or development\n
  38. Set out to make CanJS the best documented library.\n\nAwesome overview page with it&amp;#x2019;s sweet navigation, underlying docs for every function, method, attribute, and demo applications for each component.\n\nAnnotated Source\n\n\nAnd hire us for training, support, or development\n
  39. Set out to make CanJS the best documented library.\n\nAwesome overview page with it&amp;#x2019;s sweet navigation, underlying docs for every function, method, attribute, and demo applications for each component.\n\nAnnotated Source\n\n\nAnd hire us for training, support, or development\n
  40. Set out to make CanJS the best documented library.\n\nAwesome overview page with it&amp;#x2019;s sweet navigation, underlying docs for every function, method, attribute, and demo applications for each component.\n\nAnnotated Source\n\n\nAnd hire us for training, support, or development\n
  41. Set out to make CanJS the best documented library.\n\nAwesome overview page with it&amp;#x2019;s sweet navigation, underlying docs for every function, method, attribute, and demo applications for each component.\n\nAnnotated Source\n\n\nAnd hire us for training, support, or development\n
  42. Set out to make CanJS the best documented library.\n\nAwesome overview page with it&amp;#x2019;s sweet navigation, underlying docs for every function, method, attribute, and demo applications for each component.\n\nAnnotated Source\n\n\nAnd hire us for training, support, or development\n
  43. Set out to make CanJS the best documented library.\n\nAwesome overview page with it&amp;#x2019;s sweet navigation, underlying docs for every function, method, attribute, and demo applications for each component.\n\nAnnotated Source\n\n\nAnd hire us for training, support, or development\n
  44. Set out to make CanJS the best documented library.\n\nAwesome overview page with it&amp;#x2019;s sweet navigation, underlying docs for every function, method, attribute, and demo applications for each component.\n\nAnnotated Source\n\n\nAnd hire us for training, support, or development\n
  45. Set out to make CanJS the best documented library.\n\nAwesome overview page with it&amp;#x2019;s sweet navigation, underlying docs for every function, method, attribute, and demo applications for each component.\n\nAnnotated Source\n\n\nAnd hire us for training, support, or development\n
  46. Set out to make CanJS the best documented library.\n\nAwesome overview page with it&amp;#x2019;s sweet navigation, underlying docs for every function, method, attribute, and demo applications for each component.\n\nAnnotated Source\n\n\nAnd hire us for training, support, or development\n
  47. Set out to make CanJS the best documented library.\n\nAwesome overview page with it&amp;#x2019;s sweet navigation, underlying docs for every function, method, attribute, and demo applications for each component.\n\nAnnotated Source\n\n\nAnd hire us for training, support, or development\n
  48. deep binding\n\n\n\nthe flexibility to switch between libraries without losing all your skills and even some of your (code)\n
  49. \n
  50. \n
  51. \n
  52. \n
  53. \n
  54. \n
  55. \n
  56. \n
  57. \n
  58. \n