我正在处理一个ItemListView
包含多个ItemView
元素的应用。在我的ItemListView
中,我使用jQuery .each()
方法循环遍历项集合并将它们呈现为列表元素。
除了将li
元素实际附加到包含ul
之外,我已经准备好了所有部分。关键点是从ItemListView.appendItem
循环内部访问.each()
方法。我尝试过使用this.appendItem
和self.appendItem
,但在循环this
内是item
而self
是window
对象。
这就是我现在所拥有的:
ItemListView = Backbone.View.extend({
el: '#item-rows',
initialize: function () {
this.collection = new Items();
this.render();
},
render: function () {
$.each(this.collection.models, function (i, item) {
var itemview = new ItemView( { model: item });
this.appendItem(itemview); // this refers to the item, so appendItem is undefined
});
},
appendItem: function (itemView) {
$(this.el).append(itemView.render().el);
}
});
var itemlistview = new ItemListView;
我很确定上下文问题是唯一的问题,因为我已经通过将它们输出到控制台来检查其他部分,它们看起来很好。
我错过了什么?
答案 0 :(得分:2)
是的,这是一个非常简单的修复方法。你只需要在外部环境中引用this
。
render: function () {
var somereftothis = this;
$.each(this.collection.models, function (i, item) {
var itemview = new ItemView( { model: item });
somereftothis.appendItem(itemview); // this refers to the item, so appendItem is undefined
});
},