【发布时间】:2017-03-09 12:52:25
【问题描述】:
我有一个页面,我必须在其中显示 7 个集合的总数。 如果在集合中创建了任何新项目,那么我的页面应该显示更新的计数。我尝试如下
this.listenTo(XyzCollection, 'update', function() {
self.lengthVariable = XyzCollection.length;
self.render();
});
这种方法的问题是,如果任何集合的数量很大(比如 1000),那么渲染方法就会被调用很多次(总共有 7 个集合被调用)。
我也试过了
this.listenTo(XyzCollection, 'update', function() {
self.lengthVariable = XyzCollection.length;
//self.render();
});
即只需更新变量,但页面不会刷新,并且在模板上我看到计数为 0(我注释掉了渲染)。
请提出一个合适的方法来实现这个场景
view的初始化和渲染示例如下:
initialize: function() {
xxx1Collection.refresh();
xxx2Collection.refresh();
xxx3Collection.refresh();
xxx4Collection.refresh();
xxx5Collection.refresh();
xxx6Collection.refresh();
xxx7Collection.refresh();
var self = this;
this.listenTo(xxx1Collection, 'update', function() {
self.var1 = xxx1Collection.length;
self.render();
});
this.listenTo(xxx2Collection, 'update', function() {
self.var2 = xxx2Collection.length;
self.render();
});
this.listenTo(xxx3Collection, 'update', function() {
self.var3 = xxx3Collection.length;
self.render();
});
this.listenTo(xxx4Collection, 'update', function() {
self.var4 = xxx4Collection.length;
self.render();
});
this.listenTo(xxx5Collection, 'update', function() {
self.var5 = xxx5Collection.length;
self.render();
});
this.listenTo(xxx6Collection, 'update', function() {
self.var6 = xxx6Collection.length;
self.render();
});
this.listenTo(xxx7Collection, 'update', function() {
self.var7 = xxx4Collection.length;
self.render();
});
},
render: function() {
this.$el.html(this.template({
count1: self.var1,
count2: self.var2,
count3: self.var3,
count4: self.var4,
count5: self.var5,
count6: self.var6,
count7: self.var7,
}));
}
【问题讨论】:
-
你在哪里添加这个监听器?看起来您要多次添加它,否则不应多次调用它。请提供minimal reproducible example
-
我在initialize方法中添加监听器,对于每个集合(7),我添加监听器,分别为每个集合更新七个变量
-
initialize是什么?路由器?一个看法?其他视图的基本视图?这些实例有多少?XyzCollection是 Collection 构造函数还是实例? (案件可疑)我们需要更多信息来帮助您。如果您说嘿,我在初始化时执行此操作并且出现意外行为,我们无法解决问题。我们需要看看你在做什么来找出意外行为背后的实际原因...... -
在视图的初始化中,我调用了集合...只有一个视图,应该调用 7 个集合,这样就可以将计数传递给模板。Xyz 是一个集合实例(我将它导入到视图中以使用它)。同样在视图的初始化中......我对 6 个不同的集合还有 6 次调用......我希望它现在清楚......
-
也许至少发布处理这 7 个集合的整个初始化方法。言语不太可能帮助任何人解决问题