109 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			HTML
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			109 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			HTML
		
	
	
		
			Executable File
		
	
	
	
	
<!DOCTYPE html>
 | 
						|
<html>
 | 
						|
  <head>
 | 
						|
    <link href="../common/cats.css" media="screen" rel="stylesheet" type="text/css" />
 | 
						|
  </head>
 | 
						|
  <body>
 | 
						|
    <h1>A Backbone.js example about cats I've met</h1>
 | 
						|
    <marquee><p>As you can tell, you can make a very complicated web page with this stuff.</p></marquee>
 | 
						|
 | 
						|
    <script id="cat-template" type="text/underscore-template">
 | 
						|
      <div class="entry">
 | 
						|
        <h2><%= name %>!</h2>
 | 
						|
        <h3>age <%= age %></h3>
 | 
						|
        <div class="body">
 | 
						|
          <%= description %>
 | 
						|
        </div>
 | 
						|
      </div>
 | 
						|
    </script>
 | 
						|
 | 
						|
 | 
						|
    <div id="content"></div>
 | 
						|
 | 
						|
    <script type="text/javascript" src="../common/jquery.js"></script>
 | 
						|
    <script type="text/javascript" src="../common/underscore.js"></script>
 | 
						|
    <script type="text/javascript" src="backbone.js"></script>
 | 
						|
    <script type="text/javascript" src="../../src/backbone.tabletopSync.js"></script>
 | 
						|
    <script type="text/javascript" src="../../src/tabletop.js"></script>
 | 
						|
    <script type="text/javascript">
 | 
						|
      var public_spreadsheet_url = 'https://docs.google.com/spreadsheet/pub?hl=en_US&hl=en_US&key=0AmYzu_s7QHsmdE5OcDE1SENpT1g2R2JEX2tnZ3ZIWHc&output=html';
 | 
						|
        
 | 
						|
      /* 
 | 
						|
        You need to declare the tabletop instance separately, then feed it into the model/collection
 | 
						|
        You *must* specify wait: true so that it doesn't try to fetch when you initialize
 | 
						|
      */
 | 
						|
      var storage = Tabletop.init( { key: public_spreadsheet_url,
 | 
						|
                                      wait: true } )
 | 
						|
 | 
						|
      /*
 | 
						|
       Need to specify that you'd like to sync using Backbone.tabletopSync
 | 
						|
       Can specify tabletop attributes, or you can do it on the collection
 | 
						|
      */
 | 
						|
      var Cat = Backbone.Model.extend({
 | 
						|
        idAttribute: 'name',
 | 
						|
        tabletop: {
 | 
						|
          instance: storage,
 | 
						|
          sheet: 'Cats'
 | 
						|
        },
 | 
						|
        sync: Backbone.tabletopSync
 | 
						|
      })
 | 
						|
 | 
						|
      /*
 | 
						|
       Need to specify that you'd like to sync using Backbone.tabletopSync
 | 
						|
       Need to specify a tabletop key and sheet
 | 
						|
      */
 | 
						|
      var CatCollection = Backbone.Collection.extend({
 | 
						|
          // Reference to this collection's model.
 | 
						|
          model: Cat,
 | 
						|
          tabletop: {
 | 
						|
            instance: storage,
 | 
						|
            sheet: 'Cats'
 | 
						|
          },
 | 
						|
          sync: Backbone.tabletopSync
 | 
						|
      });
 | 
						|
 | 
						|
      var CatView = Backbone.View.extend({
 | 
						|
          tagname: 'div',
 | 
						|
          template: _.template($('#cat-template').html()),
 | 
						|
 | 
						|
          render: function() {
 | 
						|
            $(this.el).html(this.template(this.model.toJSON()));
 | 
						|
            return this;
 | 
						|
          }
 | 
						|
      })
 | 
						|
    </script>
 | 
						|
    <script type="text/javascript">
 | 
						|
 | 
						|
      /*
 | 
						|
        You need to initialize Tabletop before you do aaaaanything.
 | 
						|
        You might think it'd be a good idea to put that into backbone.tabletopSync,
 | 
						|
          but IMHO the fact that you could put the key/url into any model anywhere
 | 
						|
          ever sounds like trouble.
 | 
						|
      */
 | 
						|
      $(document).ready( function() {
 | 
						|
        var cats = new CatCollection();
 | 
						|
        cats.fetch({ success: showInfo });
 | 
						|
      });
 | 
						|
      
 | 
						|
      function showInfo(cats) {
 | 
						|
        var bosco_view = new CatView({ model: cats.get('Bosco') });
 | 
						|
 | 
						|
        $("#content").append( bosco_view.render().el );
 | 
						|
        
 | 
						|
        /*
 | 
						|
          Fetching on models works as long as you've specified a sheet
 | 
						|
          and an idAttribute for the Backbone.Model (you can always
 | 
						|
          use rowNumber, it comes baked in to Tabletop)
 | 
						|
        */
 | 
						|
        thomas = new Cat({name: 'Thomas'})
 | 
						|
        thomas.fetch();
 | 
						|
 | 
						|
        var thomas_view = new CatView({ model: thomas });
 | 
						|
        $("#content").append( thomas_view.render().el );
 | 
						|
      }
 | 
						|
    
 | 
						|
      document.write("The published spreadsheet is located at <a target='_new' href='" + public_spreadsheet_url + "'>" + public_spreadsheet_url + "</a>");    
 | 
						|
    </script>
 | 
						|
  </body>
 | 
						|
</html>
 |