Backbone .render().$el trouble



我在 Backbone 中渲染视图时遇到问题,我无法弄清楚我的障碍在哪里。 我的日志错误读取Uncaught TypeError: Cannot read property '$el' of undefined,产生错误的集合呈现如下所示:

 render: function(){
                this.$el = $('#list_entries');
                console.log(this.$el);
                var self = this;
                self.$el.html('');
                _.each(this.model.toArray(), function(list, i){
                    self.$el.append(new ListView({model: list}).render().$el);
                });
                return this;
            }

这是集合render调用的单个条目视图

 var ListView = Backbone.View.extend({
                model: new List(),
                tagName: 'div',
                className: 'singleList',
                initialize: function(){
                    this.template = _.template($('#list_template').html());
                },
                render: function(){
                    this.$el.html(this.template(this.model.toJSON()));
                }
        });

奇怪的是,我正在使用完全相同的方法来渲染另一个视图并且没有这个问题。

您的render丢失return this;

render: function(){
    this.$el.html(this.template(this.model.toJSON()));
    return this;
}

你可以把它传递到_.each

_.each(this.model.toArray(), function(list, i){
    this.$el.append(new ListView({model: list}).render().$el);
}, this);

那么你根本不需要var self = this;

您应该在_.each回调中使用self以获得正确的作用域。

_.each(this.model.toArray(), function(list, i){
    self.$el.append(new ListView({model: list}).render().$el);
});
我相信

问题是_.each函数回调中的上下文不是您认为的观点。请尝试改用self.$el.append

最新更新