2017-03-09 97 views
0

我有一个页面,我必须显示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(); 
}); 

即只需更新变量,但页面dose'nt得到刷新,并在模板上,我看到计数为0(我注释掉渲染)。

请建议适当的方式实现的方案

的例子初始化和渲染的观点如下:

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, 
    })); 

}

+1

你在哪里添加这个听众?看起来你要多次添加它,否则它不应该被多次调用。请提供[mcve] –

+0

我正在初始化方法中添加侦听器,并且对于每个集合(7),我将添加侦听器,分别为每个集合更新7个变量 – sk215

+0

'initialize'是什么?路由器?一个看法?其他视图的基本视图?这些存在多少个实例? 'XyzCollection'是一个Collection构造函数或实例吗? (案件可疑)我们需要更多信息来帮助你。如果你说嘿,我在初始化时会这样做,我会发现意想不到的行为,所以我们无法弄清楚这个问题。我们需要看看你在做什么来弄清楚意外行为背后的真正原因...... –

回答

0

假设有一个很好的理由为7个集在视图中存在增量名称,则在集合更新上重新呈现的最简单方法如下。

initialize: function() { 
    // make collections properties of the view 
    this.xxx1Collection.refresh(); 
    this.xxx2Collection.refresh(); 
    /* ... */ 
    this.xxx7Collection.refresh(); 

    // create the event hash once, and reuse it. 
    var events = { update: this.render }; 

    // there's no need to use `self` when using `this.listenTo` 
    this.listenTo(this.xxx1Collection, events) 
     .listenTo(this.xxx2Collection, events) 
     /* ... */ 
     .listenTo(this.xxx7Collection, events); 
}, 

render: function() { 
    // just pass the length here instead. 
    this.$el.html(this.template({ 
     count1: this.xxx1Collection.length, 
     count2: this.xxx2Collection.length, 
     /* ... */ 
     count7: this.xxx7Collection.length, 
    })); 
} 

Catalog of Events

“更新”(collection, options) - 后已被添加或从集合中删除任何 的车型数量单一事件触发。

+0

OP说这会触发对他来说'呈现'1000次...... –

+0

@TJ问题来自其他地方,问题中未显示。 –

+0

是的,那么问题的答案如何...;) –