Arrays 将Meteor模板帮助程序返回的值用于其他计算[使用聚合求解]
我很难理解如何在Meteor应用程序中运行一些简单的计算 以下帮助程序返回三个值(分子、分母和二者相除的结果)。前两个值当前来自一个集合(最终将来自API提要),并且依赖于来自不同集合(使用Template.parentData调用)的两个值。第三个值不会保存到数据库中。通过循环重复此顺序,以在表中显示三个值Arrays 将Meteor模板帮助程序返回的值用于其他计算[使用聚合求解],arrays,meteor,meteor-blaze,Arrays,Meteor,Meteor Blaze,我很难理解如何在Meteor应用程序中运行一些简单的计算 以下帮助程序返回三个值(分子、分母和二者相除的结果)。前两个值当前来自一个集合(最终将来自API提要),并且依赖于来自不同集合(使用Template.parentData调用)的两个值。第三个值不会保存到数据库中。通过循环重复此顺序,以在表中显示三个值 Template.ValuationTable.helpers({ selections: function () { var selected = this.va
Template.ValuationTable.helpers({
selections: function () {
var selected = this.valuationSelections;
return Companies.find({ticker: {$in: selected}})
},
valuationNum: function() {
var valuationMetric = Template.parentData(1).valuationMetric;
switch (valuationMetric) {
case "EV/Revenue":
return this.enterpriseValue.toFixed(1);
break;
case "EV/EBITDA":
return this.enterpriseValue.toFixed(1);
break;
default:
return "";
}
},
valuationDen: function() {
var valuationMetric = Template.parentData(1).valuationMetric;
var valuationPeriod = Template.parentData(1).valuationPeriod;
switch (valuationMetric) {
case "EV/Revenue":
switch (valuationPeriod) {
case "LTM":
return this.ltm.revenue.toFixed(1);
break;
case "FY1":
return this.fy1.revenue.toFixed(1);
break;
case "FY2":
return this.fy2.revenue.toFixed(1);
break;
}
break;
case "EV/EBITDA":
switch (valuationPeriod) {
case "LTM":
return this.ltm.ebitda.toFixed(1);
break;
case "FY1":
return this.fy1.ebitda.toFixed(1);
break;
case "FY2":
return this.fy2.ebitda.toFixed(1);
break;
}
break;
default:
return "";
}
}
});
Template.registerHelper('divide', function(a, b) {
return (a / b).toFixed(1);
});
<template name="ValuationTable">
{{#each selections}}
<tr>
<td>
<a>${{valuationNum}}</a>
</td>
<td>
<a>${{valuationDen}}</a>
</td>
<td>
<a>{{divide valuationNum valuationDen}}x</a>
</td>
</tr>
{{/each}}
</template>
Template.ValuationTable.helpers({
选择:函数(){
所选var=此。估价选择;
返回公司。查找({ticker:{$in:selected}})
},
evaluationnum:function(){
var valuationMetric=模板.parentData(1).valuationMetric;
开关(估价度量){
案例“EV/收入”:
将此.enterpriseValue.toFixed返回(1);
打破
案例“EV/EBITDA”:
将此.enterpriseValue.toFixed返回(1);
打破
违约:
返回“”;
}
},
赋值den:function(){
var valuationMetric=模板.parentData(1).valuationMetric;
var valuationPeriod=Template.parentData(1).valuationPeriod;
开关(估价度量){
案例“EV/收入”:
转换(估价期){
案例“LTM”:
将此.ltm.revenue.toFixed返回(1);
打破
案例“FY1”:
将该.fy1.收入返回固定(1);
打破
案例“FY2”:
将该.fy2.收入返回固定(1);
打破
}
打破
案例“EV/EBITDA”:
转换(估价期){
案例“LTM”:
将该.ltm.息税折旧摊销前利润返回固定(1);
打破
案例“FY1”:
将本财年的息税折旧摊销前利润返回固定(1);
打破
案例“FY2”:
将本财年的息税折旧摊销前利润返回固定(1);
打破
}
打破
违约:
返回“”;
}
}
});
Template.registerHelper('divide',函数(a,b){
返回(a/b)。固定(1);
});
{{{#每项选择}
${{valuationNum}
${{valuationDen}
{{divide valuationNum valuationDen}}x
{{/每个}}
然后,我需要计算第三个值系列的平均值和中值,以显示在页面上并用作D3的数据点。我知道我需要数组中的这些值来计算平均值和中值,但我不知道如何从助手结果中“获取”它们
首先,我应该在对象中构建开关(可能在订阅中?)并将其传递给助手吗?如果是这样,请提供任何指导
第二,如何获得要添加到数组中的第三个值?我可以直接从助手处访问它吗
提前谢谢,如果这是两个不同的问题,很抱歉,我认为它们是密切相关的
编辑:
根据Michel关于meteorhacks:aggregate的建议,我意识到我的想法是错误的,需要聚合,而不是助手。在处理单个文档的助手函数中执行聚合操作是不切实际的。您可能会发现一个包,例如用于实现聚合函数的包
为什么不切实际?首先,由于反应性,任何值甚至文档的数量都可能随时发生变化。您不能真正执行聚合,因为文档显示在具有一个文档范围的函数中。谢谢-您是说我需要使用聚合函数进行任何数学计算吗?其中一些只是除法和乘法,我认为没有必要(我也不知道如何使用它们)。我是开发新手,所以我甚至不确定这里的问题是针对Meteor还是Javascript。聚合在多个文档上执行函数时非常有用。简单除法(分子/分母)取两个数字,如果两个数字来自同一文档,则可以在助手中执行(一次一个文档-此值)。您的平均值和中位数需要所有文档,因此需要汇总。你的问题比javascript更像流星,因为它涉及blaze模板和帮助函数。非常感谢-需要花一些时间学习,希望你不介意我等到它工作后再接受答案!当然可以学习流星的好处是它能很快地回报你。米歇尔,这让我找到了正确的答案。我在聚合方面遇到了一些问题,但我将单独发布,以避免混淆原始问题。谢谢