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

Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native ApplicationsWSO2
 
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
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoffsammart93
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...DianaGray10
 
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
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...Zilliz
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...apidays
 
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
 
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
 
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
 
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
 
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
 
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Bhuvaneswari Subramani
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyKhushali Kathiriya
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistandanishmna97
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...apidays
 
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
 
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
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 

Kürzlich hochgeladen (20)

Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
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
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
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...
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
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
 
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
 
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
 
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)
 
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
 
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
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
 
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
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 

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