我正在尝试在onRendered回调中设置一个等于active
全局帮助器中的值的变量。我的全球助手定义如下:
的客户机/ LIB / helpers.js
//all possible calculations//
getResults = function(valuationId,targetId){
var valuation = Valuations.findOne({_id: valuationId});
var targetTicker = Companies.findOne({_id:targetId}).ticker;
var targetData = CompaniesData.findOne({ticker: targetTicker});
return {
peFy1: targetData.epsFy1 * valuation.priceEarningsFy1,
peFy2: targetData.epsFy2 * valuation.priceEarningsFy2
//more//
}
};
//choose one value from above, based on several other variables//
Template.registerHelper('active',function(){
var valuationId = this._id;
var targetId = this.targetId;
var valuationPeriod = this.valuationPeriod;
switch (valuationPeriod) {
case "FY1"
return getResults(valuationId, targetId).peFy1;
break;
case "FY2":
return getResults(valuationId, targetId).peFy2;
break;
//more cases//
我可以直接从getResults
获取并使用单个值,并使用下面的最后一行。
Template.ValuationBase.onRendered (function () {
var targetId = Template.parentData(0).targetId;
var valuationId = Template.parentData(0)._id;
var valuationActive = getResults(valuationId,targetId).peFy1;
但是我无法弄清楚如何从active
帮助器中获取逻辑产生的值。我以为它会var valuationActive = active();
,但会返回not defined
。我也看到了this answer,但它似乎是在模板JS中创建函数,而不是引用帮助器。
我确信这是我调用函数的一个基本错误。谢谢。
答案 0 :(得分:0)
使用Blaze._globalHelpers.active()
在客户端的任何位置通过javascript引用您的全局帮助器active
。
我会再次(依次)添加this
来传递全局帮助程序的数据上下文是有风险的。您假设无论如何都始终正确设置上下文。您可以通过以下方式保护自己免受这种假设:
Template.registerHelper('active',function(id){
var valuationId = id || this._id; // use the arg if provided, otherwise rely on 'this'
...
});