我可以使用全局帮助器将数据传递给onRendered吗?

时间:2015-10-15 04:04:57

标签: javascript meteor

我正在尝试在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中创建函数,而不是引用帮助器。

我确信这是我调用函数的一个基本错误。谢谢。

1 个答案:

答案 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'
  ...
});