<!doctype html> <html> <head> <meta charset="utf-8" /> <title>Looking At Underscore.js Templates</title> </head> <body> <h1> Looking At Underscore.js Templates </h1> <!-- BEGIN: Underscore Template Definition. --> <script type="text/template" class="template"> <h2> <%- rc.listTitle %> </h2> <ul> <% _.each( rc.listItems, function( listItem ){ %> <li> <%- listItem.name %> <% if ( listItem.hasOlympicGold ){ %> <em>*</em> <% } %> </li> <% }); %> </ul> <% var showFootnote = _.any( _.pluck( rc.listItems, "hasOlympicGold" ) ); %> <% if ( showFootnote ){ %> <p style="font-size: 12px ;"> <em>* Olympic gold medalist</em> </p> <% } %> </script> <!-- END: Underscore Template Definition. --> <!-- Include and run scripts. --> <script type="text/javascript" src="../jquery-1.8.0.js"></script> <script type="text/javascript" src="../underscore.js"></script> <script type="text/javascript"> // When rending an underscore template, we want top-level // variables to be referenced as part of an object. For // technical reasons (scope-chain search), this speeds up // rendering; however, more importantly, this also allows our // templates to look / feel more like our server-side // templates that use the rc (Request Context / Colletion) in // order to render their markup. _.templateSettings.variable = "rc"; // Grab the HTML out of our template tag and pre-compile it. var template = _.template( $( "script.template" ).html() ); // Define our render data (to be put into the "rc" variable). var templateData = { listTitle: "Olympic Volleyball Players", listItems: [ { name: "Misty May-Treanor", hasOlympicGold: true }, { name: "Kerri Walsh Jennings", hasOlympicGold: true }, { name: "Jennifer Kessy", hasOlympicGold: false }, { name: "April Ross", hasOlympicGold: false } ] }; // Render the underscore template and inject it after the H1 // in our current DOM. $( "h1" ).after( template( templateData ) ); </script> </body> </html>