В Метеоре, как я могу сделать сумму некоторых вычисленных полей в таблице?
Я полностью переписал этот вопрос, потому что я добился некоторого прогресса, и мне также нужно было уточнить его дальше.
В общем - я хотел бы вычислить итоги строк и столбцов для таблицы без необходимости пересчитывать значение каждой ячейки дважды. Позволь мне объяснить.
У меня есть коллекция, и каждый документ содержит 12 значений. Для каждого документа мне нужно выполнить два медленных и дорогих вычисления для этих 12 значений документа, чтобы получить два результата, а затем отобразить эти два результата в таблице. Затем мне также нужна сумма двух вычисленных результатов в каждой строке и сумма всех вычисленных результатов для каждого столбца.
Страница будет выглядеть так:
resa resb row1sum
resa resb row2sum
(etc)
col1sum col2sum
И часть шаблона может выглядеть так:
<table>
{{#each docs}}
<tr><td>{{resa}}</td> <td>{{resb}}</td> <td>{{rowsum}}</td></tr>
{{/each}}
<tr><td>{{colsum1}}</td> <td>{{colsum2}}</td>
</table>
Теперь для каждой строки я использую предложение transform в моем помощнике курсора для генерации результатов и строк.
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;
}
});
},
Это хорошо работает для расчета двух результатов и строки для каждого документа и является реактивным.
Но сейчас я пытаюсь найти способ эффективно рассчитать суммы столбцов.
Я мог бы использовать следующее
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 () дважды для каждой ячейки, и мне нравится вычислять каждое значение ячейки только один раз, поскольку мои вычисления, к сожалению, медленные. :)
Могу ли я вместо этого как-то вычислить суммы столбцов, но внутри моего помощника курсора?
Или есть какой-то другой способ реактивно взять всю коллекцию и реактивно генерировать как строки, так и столбцы за один проход?