[英]Accessing a method on a Backbone.js view inside of loop
我正在开发一个包含包含多个ItemView
元素的ItemListView
的应用程序。 在我的ItemListView
,我使用jQuery .each()
方法遍历项目集合并将它们呈现为列表元素。
除了将li
元素实际附加到包含的ul
之外,我已经准备好了所有内容。 症结在于从我的.each()
循环内部访问ItemListView.appendItem
方法。 我试过使用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;
我非常确定上下文问题是唯一的问题,因为我已经通过将其他内容输出到控制台检查了它们的其他部分,并且看起来还不错。
我想念什么?
实现此目标的一种更为Backbone的方法是使用underscore.js提供的collection的each
:
render: function() {
this.collection.each( function( item, index ) {
var itemView = new ItemView( { model:item } );
this.appendItem( itemView );
}, this );
return this;
}
笔记:
是的,这是一个非常简单的修复。 您只需要在外部上下文中参考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
});
},
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.