Trouble accessing attributes in the template - all attributes apart from 'name' show error '[attributename] is not defined'
===

The problem is that all Object attributes apart from 'name' call the error 'id/url/whatever is not defined' in the console when accessed from the template. A template with just 'name' displays fine and shows the correct name, but as soon as I call a different attribute, eg. `id` or `url`, it breaks. The object passed to the view is a parsed static JSON file with all items sitting on the same level and accessible from the console with e.g. `collectionName.models[0].get('id');`

What has me confused is that the name attribute works, as if it is predefined somewhere in backbone/underscore code as a default. 

Am I missing something very obvious?
Since I can access the model data from the console, I think that there's something wrong with how the view itself handles the data, but I've tried rewriting it in a couple different ways and nothing seemed to make any difference.

<hr>
All the relevant code. 

Example template code:

    <span class="name"><%= name %></span>
    <%= id %> <%= url %>

The router code: 

    routes: {
      '': 'intro', // this route is using pretty much identical code and works fine.
      ':id': 'firstLevel'    
    },

    firstLevel: function  (id) {
      window.singleBuilding = new ThisBuilding({}, {idBuilding: id});
      
      window.singleBuilding.fetch();      

      this.floorView = new FloorList({
        collection: window.singleBuilding
      });

      var $intro = $('#intro');
      $intro.empty();
      $intro.append(this.floorView.render().el);
    }

Views: 

    window.FloorSingleList = Backbone.View.extend({

      className: 'floor-list',

      initialize: function  () {

      this.template = _.template(tpl.get('floors-list-item')); 
      _.bindAll(this, 'render');
      this.model.bind('change', this.render);
      this.testModel = this.model.attributes;
    },

    render: function  () {
      console.log("The test model is:", this.testModel);
      console.log("The actual model is:", this.model);
      var renderedContent = this.template(this.model.toJSON());
      $(this.el).html(renderedContent);

      return this;
     }

    });

    window.FloorList = Backbone.View.extend({

    tagName: 'section',
    className: 'intro-list',

    initialize: function () {
    
      this.template = _.template(tpl.get('intro-list'));
      _.bindAll(this, 'render');
      this.collection.bind('reset', this.render, this);
      this.collection.bind('change', this.render, this);
    },

    render: function  (eventName) {

         var $introList;
         var collection = this.collection;
      
      $(this.el).html(this.template({ }));
      $introList = this.$('.intro-list');
      collection.each(function (building) {
        var view = new FloorSingleList({
          model: building,
          collection: collection
        });
        $introList.append(view.render().el);
      });

      return this;
    }

    });

Model code:

    window.ThisBuilding = Backbone.Collection.extend({

    model : Building,

    initialize: function(models, options) {
      // Initialising the argument passed on from the router.
      this.idBuilding = options.idBuilding;
      return this;
    },

    url : function(){
      return  "data.json"      
    },

    parse: function (response) {
      console.log("Passed parameters are :", this.idBuilding); // Returns the request parameters passed from the router.
      return response[this.idBuilding];
    }

    });

Templates & Bootstrap

    // templates are loaded during the bootstrap 
    tpl.loadTemplates(['header', 'intro-list', 'floors-list-item', 'building-list-item'], function() {
        window.App = new ExampleApp();
        Backbone.history.start();
    });