Ошибка рендеринга представления Backbone.js

Если я сделаю это - все работает отлично -

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

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

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

        }
    });

Но когда я вставляю this.$el.html('test'); в обратном вызове успеха я получаю ошибку:

TypeError: 'undefined' не является объектом (оценка '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');
                }
            })
        }
    });

Журнал консоли запускается правильно.

1 ответ

Решение

Внутри success контекст изменился, поэтому this больше не относится к объекту представления (я полагаю, что это фактически относится к объекту JQuery Ajax). Чтобы обойти это, вы можете сохранить ссылку на представление, используя var self = this:

var users = new Users();
var self = this;
users.fetch({
    success: function() {
        console.log('success');
        self.$el.html('test');
    }
})
Другие вопросы по тегам