Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Backbone.js集合视图为单个触发器多次渲染_Backbone.js_Listener_Backbone Views_Backbone Events_Backbone.js Collections - Fatal编程技术网

Backbone.js集合视图为单个触发器多次渲染

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

我有backbone.js collection和collectionview。集合视图侦听其集合
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
。。。有助于避免内存泄漏。