Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on May 6th, 2012  |  syntax: None  |  size: 1.39 KB  |  hits: 27  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. Progressive Enhancement with KnockoutJS
  2. var data = {
  3.   facets: [{
  4.     name : "some name",
  5.     values: [{
  6.       value: "some value"
  7.     }]
  8.   }]
  9. };
  10.        
  11. <ul data-bind="foreach: facets">    
  12.   <li>      
  13.     <span data-bind="text: name"></span>
  14.     <ul data-bind="foreach: values">            
  15.       <li data-bind="text: value"></li>    
  16.     </ul>
  17.   </li>
  18. </ul>
  19.        
  20. <ul>    
  21.   <li>      
  22.     <span>some name</span>
  23.     <ul>            
  24.       <li>some value</li>      
  25.     </ul>
  26.   </li>
  27. </ul>
  28.        
  29. ko.bindingHandlers.prerenderedArray = {
  30.     init: function(element, valueAccessor, allBindingsAccessor, viewModel) {
  31.         var binding = valueAccessor();              
  32.         binding.firstTime = true;
  33.  
  34.         $(element).children().each(function(index, node) {                  
  35.             var value = ko.utils.unwrapObservable(binding.value)[index];                        
  36.             ko.applyBindings(value, node);
  37.         });
  38.  
  39.         return { 'controlsDescendantBindings': true };              
  40.     },
  41.     update: function (element, valueAccessor, allBindingsAccessor, viewModel) {            
  42.         var binding = valueAccessor();
  43.         if (binding.firstTime) {
  44.             binding.firstTime = false;
  45.             return;
  46.         }              
  47.  
  48.         $(element).children().remove();
  49.         ko.applyBindingsToNode(element, { template: { name: binding.template, foreach: binding.value }}, viewModel)
  50.     }
  51. };