在Meteor中,如何在表格中对某些计算字段进行求和?

我完全重写了这个问题,因为我取得了一些进展,我还需要进一步澄清。

通常 – 我想计算表的行和列总计,而不必重新计算每个单元格值两次。 让我解释。

我有一个集合,每个文档包含12个值。 对于每个doc,我需要对这12个doc值执行两个缓慢昂贵的计算,产生两个结果,然后在表中显示这两个结果。 然后我还需要每行上两个计算结果的总和,以及每列的所有计算结果的总和。

该页面如下所示:

resa resb row1sum resa resb row2sum (etc) col1sum col2sum 

并且模板的一部分可能如下所示:

  {{#each docs}}  {{/each}} 
{{resa}} {{resb}} {{rowsum}}
{{colsum1}} {{colsum2}}

对于每一行,我现在在游标助手中使用transform子句来生成结果和rowums。

 docs: function() { return myCollection.find({},{transform: function(doc) { var resa = slowcalculation1(doc); doc.resa = resa; var resb = slowcalculation2(doc); doc.resb = resb; doc.rowsum = resa+resb; return doc; } }); }, 

这很适合计算每个文档的两个结果和rowsum,并且是react native的。

但我现在正试图找到一种有效计算列总和的方法。

我可以使用以下内容

 Tracker:autorun(function() { var col1tot=0; var col2tot=0; myCollection.find().forEach(function(doc) { var resa = slowcalculation1(doc); col1tot += resa; var resb = slowcalculation2(doc); col2tot += resb; }); Session.set('col1',col1tot); Session.set('col2',col2tot); // then get these coltotals using helpers }); 

但有更好的方法吗? 就目前而言,为了生成页面,我为每个单元格调用slowcalculations()两次,并且我只想计算每个单元格值一次,因为我的计算是,ahem,slow。 🙂

我可以用某种方式计算列总和,但是在我的光标助手中吗?

或者是否有其他方法可以反复采取整个集合并在一次通过中react native地生成rowums和colsum?

所以,我相信我有一个答案。 它似乎至少有效。

我修改了传递给模板的模板助手,现在看起来像这样

 docs: function() { var col1sum=0; var col2sum=0; return myCollection.find({},{transform: function(doc) { var resa = slowcalculation1(doc); doc.resa = resa; var resb = slowcalculation2(doc); doc.resb = resb; doc.rowsum = resa+resb; // the rowsum col1sum += resa; col2sum += resb; Session.set('col1sum',col1sum); Session.set('col2sum',col2sum); // then get these colsums into template using helpers return doc; } }); }, 

这会计算行和,以及列总和,从而最大限度地减少slowcalculations()的完成次数。