Backbone.js集合视图为单个触发器多次渲染
我有backbone.js collection和collectionview。集合视图侦听其集合Backbone.js集合视图为单个触发器多次渲染,backbone.js,listener,backbone-views,backbone-events,backbone.js-collections,Backbone.js,Listener,Backbone Views,Backbone Events,Backbone.js Collections,我有backbone.js collection和collectionview。集合视图侦听其集合add事件。但当我向它的集合中添加新模型时,它会为每个模型渲染多次。 请检查一下电话号码 您的render方法渲染整个集合。因此,添加模型后,应清除现有的项目视图: render: function() { var els = [], self = this; this.$el.empty(); //------^---- clear existing this.c
add
事件。但当我向它的集合中添加新模型时,它会为每个模型渲染多次。
请检查一下电话号码
您的
render
方法渲染整个集合。因此,添加模型后,应清除现有的项目视图:
render: function() {
var els = [], self = this;
this.$el.empty();
//------^---- clear existing
this.collection.each(function(image){
var imageView = new ImageView({model: image});
self.$el.append(imageView.render().el);
});
return this;
}
也就是说,最好添加一个单独的方法,只附加单个项视图,而不是呈现整个集合:
var ImageCollectioView=Backbone.View.extend({
初始化:函数(){
这个。render();
this.listenTo(this.collection'add',this.renderItem);
},
el:'续',
render:function(){
this.collection.each(this.renderItem,this);
归还这个;
},
renderItem:函数(图像){
var imageView=新的imageView({
型号:图像
});
此.el.append(imageView.el);
}
});
您的
呈现
方法呈现整个集合。因此,添加模型后,应清除现有的项目视图:
render: function() {
var els = [], self = this;
this.$el.empty();
//------^---- clear existing
this.collection.each(function(image){
var imageView = new ImageView({model: image});
self.$el.append(imageView.render().el);
});
return this;
}
也就是说,最好添加一个单独的方法,只附加单个项视图,而不是呈现整个集合:
var ImageCollectioView=Backbone.View.extend({
初始化:函数(){
这个。render();
this.listenTo(this.collection'add',this.renderItem);
},
el:'续',
render:function(){
this.collection.each(this.renderItem,this);
归还这个;
},
renderItem:函数(图像){
var imageView=新的imageView({
型号:图像
});
此.el.append(imageView.el);
}
});
我错过了它,谢谢,它现在可以工作了,还有一个帮助我的主干编码模式是正确的还是错误的?@WimalWeerawansa您的编码是正确的,但可以改进。看见主要的一点是,您不应该在视图构造函数中硬编码模型/集合实例。可以在外部创建它们并将其作为选项传递,也可以在视图内部创建它们。另一件事是,您不必手动初始化模型。非常感谢您的帮助。@WimalWeerawansa哦,忘了提及而不是
bind
。。。有助于避免内存泄漏。我错过了它,谢谢,它现在可以工作了,还有一个帮助我的主干编码模式是正确的还是错误的?@WimalWeerawansa您的编码是正确的,但可以改进。看见主要的一点是,您不应该在视图构造函数中硬编码模型/集合实例。可以在外部创建它们并将其作为选项传递,也可以在视图内部创建它们。另一件事是,您不必手动初始化模型。非常感谢您的帮助。@WimalWeerawansa哦,忘了提及而不是bind
。。。有助于避免内存泄漏。