Backbone model is not rendering default? Need Jade and Backbone gurus

Hey so I am having a problem where my templates change but the backbone model does not seem to provide the info I need. I am trying to solve this so I can move on to making collections. I am not getting any errors and I am using handlebars but have tried underscore's templating as well and the problem doesn't lie there but against the info displaying. When I click edit and the edit template shows it is showing undefined for #{firstName} and the others.

Main.js file

(function () {
    window.App = {
        Models: {},
        Collections: {},
        Views: {},
        Templates: {},
        Router: {}

    };

    // MODEL
    App.Models.User = Backbone.Model.extend({
        defaults: {
            firstName: 'first',
            lastName: 'last',
            email: 'Email',
            phone: '222',
            birthday: 'date'
        },

        validate: function (attrs) {
            if (!attrs.firstName) {
                return 'You must enter a real first name.';
            }
            if (!attrs.lastName) {
                return 'You must enter a real last name.';
            }
            if (attrs.email.length < 5) {
                return 'You must enter a real email.';
            }
            if (attrs.phone.length < 10 && attrs.phone === int) {
                return 'You must enter a real phone number, if you did please remove the dash and spaces.';
            }
            if (attrs.city.length < 2) {
                return 'You must enter a real city.';
            }
        },

        initialize: function() {
             this.on('invalid', function (model, invalid) {
                console.log(invalid);
            });
        }

    });


    //VIEW
    App.Views.User = Backbone.View.extend({
        el: '#user',
        //model: userModel,
        //tagName: 'div',
        //id: 'user',
        //className: 'userProfile',
        //template: _.template($("#userTemplate").html()),
        //editTemplate: _.template($("#userEditTemplate").html()),


        initialize: function (){

        },


    render: function() {
        this.template = Handlebars.compile($("#userTemplate").html());
        this.editTemplate = Handlebars.compile($("#userEditTemplate").html());

        this.$el.html(this.template(this.model.toJSON()));
        return this;
    },

    events: {
        'click button.edit': 'editProfile',
    //  'click button.save': 'saveEdits',
        'click button.cancel': 'cancelEdits'
    },

    editProfile: function () {
        this.$el.html(this.editTemplate(this.model.toJSON()));

    }, 

        //saveEdits: function (e) {
        //  e.preventDefault();

        //  var formData = {},
        //      prev = this.model.previousAttributes();
//

            //get form data
        //  $(e.target).closest('form').find(':input').not('button').each(function(){
        //      var el = $(this);
        //      formData[el.attr('class')] = el.val();
        //  });

            //update model
        //  this.model.set(formData);

            //render view
        //  this.render();

            //update array
        //},

        cancelEdits: function() {
            this.render();
        }

    });
    //start history service
    Backbone.history.start();

    var user = new App.Views.User({model: new App.Models.User()});
    user.render();
})();

Jade file

extends layout
block content   
    div.centerContent

        h4 User goes here with equal before it no space
            div#user
                p #{firstName} #{lastName}
                p #{email}
                p #{phone}
                p #{birthday}
                button.edit Edit

        script(id="userTemplate", type ="text/template")
                p #{firstName} #{lastName} 1
                p #{email} 2 
                p #{phone} 3 
                p #{birthday} 4
                button.edit Edit

        script(id="userEditTemplate", type ="text/template")
            div
                form(action="#")
                    input(type="text", class="firstName", value='#{firstName}') 
                    input(type="text", class="lastName", value='#{lastName}')
                    input(type="email", class="email", value='#{email}')
                    input(type="number", class="phone", value='#{phone}')
                    input(type="date", class="birthday", value='#{birthday}')
                button.save Save
                button.cancel Cancel
        hr
        script(type="text/javascript", src="/js/main.js")

Try removing this line from your view

model: App.Models.User,

You are trying to assign a Backbone function directly to your view.

Also the problem is because of this line in your render method..

render: function() {
       var template = Handlebars.compile($("#userTemplate").html());
       var editTemplate = Handlebars.compile($("#userEditTemplate").html());

The editemplate is local to the render method and not available in other methods.

editProfile: function () {
     this.$el.html(this.editTemplate(this.model.toJSON()));
}, 

You are trying to access the template using this.editTemplate , but the variable is local to the render method and not to the view.. So you are not able to access it..

Instead of creating it in the local scope, instantiate to the view it self so that it is available in other methods of the view.

render: function() {
      this.template = Handlebars.compile($("#userTemplate").html());
      this.editTemplate = Handlebars.compile($("#userEditTemplate").html());

Then it should be available to the other methods as well in the same view.