在此代码中......
_.each(this.photos, function(element,index,list) {
console.log('element...');
console.log(element);
var photoView = new PhotoView({photo:element});
self.$el.append(photoView.render());
});
element
是整个this.photos集合。为什么不是集合中10个中的一个照片元素?
编辑:这是填充照片集的方法....
loadPhotos: function(memberId) {
var self = this;
this.photos = new PhotosCollection([]);
this.photos.on('error', this.eventSyncError, this);
this.photos.fetch({
url: this.photos.urlByMember + memberId,
success: function(collection,response,options) {
console.log('Fetch photos success!');
self.render();
}
});
},
该集合可以很好地加载模型。在Chrome控制台中,我可以看到模型集合。我不确定是什么问题。我不能用下面海报推荐的任何方法来迭代这个集合。
答案 0 :(得分:3)
您错误地使用了_.each
方法。 underscore methods需要直接调用集合:
this.photos.each(function(element,index,list) {
console.log('element...');
console.log(element);
var photoView = new PhotoView({photo:element});
self.$el.append(photoView.render());
});
或者,如果您想使用_.each
,则需要传递models
property而不是集合对象本身作为列表:
_.each(this.photos.models, function(element,index,list) {
console.log('element...');
console.log(element);
var photoView = new PhotoView({photo:element});
self.$el.append(photoView.render());
});
答案 1 :(得分:0)
应该使用this.photos.each(function(elt, index, list){...})
代替_.each(this.photos,...)
,因为this.photos
不是下划线_.chain
对象。
答案 2 :(得分:0)
感谢您的建议!如果没有上述所有建议,我绝不会想到这一点。所以这就是问题......
在父视图中,这会加载特定成员的照片记录......
loadPhotos: function(memberId) {
var self = this;
this.photos = new PhotosCollection([]);
this.photos.on('error',this.eventSyncError,this);
this.photos.fetch({
url: this.photos.urlByMember + memberId,
success: function(collection,response,options) {
self.render();
}
});
},
仍然在父视图中,Backbone.Subviews在渲染时使用它来调用每个子视图。请注意我如何将this.photos传递给subvw-photos ......
subviewCreators: {
"subvw-profile": function() {
var options = {member: this.member};
// do any logic required to create initialization options, etc.,
// then instantiate and return new subview object
return new ProfileView( options );
},
"subvw-photos": function() {
var options = {photos: this.photos};
return new PhotosView( options );
},
"subvw-comments": function() {
var options = {};
return new CommentsView( options );
}
},
这是在subvw-photos子视图中。请注意intialize如何接受集合作为参数。看到这个问题?...
initialize: function(photos) {
Backbone.Courier.add(this);
this.photos = photos;
},
render: function() {
console.log('rendering photosview now...');
var self = this;
this.photos.each(function(element,index,list) {
var photoView = new PhotoView({photo:element});
$(self.el).append(photoView.render());
});
return this;
},
我正在将一个包装照片集的对象传递给initalize,但后来对待它就像它只是照片集的参考。我不得不将subvw-photos初始化为以下内容......
initialize: function(args) {
Backbone.Courier.add(this);
this.photos = args.photos;
},
当然,所有其他代码神奇地开始工作: - /
再次感谢您的提示!你肯定让我走上正轨: - )