我在 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
。