2

If I do this - every thing works great -

var UserList = Backbone.View.extend({
        el: '.page',
        render: function(){

            var users = new Users();
            users.fetch({
                success: function() {
                    console.log('success');

                }
            })
                this.$el.html('test');

        }
    });

But when I insert the this.$el.html('test'); into the success callback I am getting an error :

TypeError: 'undefined' is not an object (evaluating 'this.$el.html')

var UserList = Backbone.View.extend({
        el: '.page',
        render: function(){

            var users = new Users();
            users.fetch({
                success: function() {
                    console.log('success');
                    this.$el.html('test');
                }
            })
        }
    });

The console log is fired correctly.

shannoga
  • 19,649
  • 20
  • 104
  • 169

1 Answers1

3

Inside success the context has changed, so this no longer refers to the view object (it actually refers to the JQuery Ajax object, I believe). To work around this you can save a reference to the view using var self = this:

var users = new Users();
var self = this;
users.fetch({
    success: function() {
        console.log('success');
        self.$el.html('test');
    }
})
McGarnagle
  • 101,349
  • 31
  • 229
  • 260