我可以使用全局助手传递数据到onrender

Can I use a global helper to pass data into onRendered?

本文关键字:数据 onrender 可以使 全局 我可以      更新时间:2023-09-26

我试图在onrender回调中设置一个变量,等于active全局helper的值。我的全局帮助器定义如下:

客户端/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。我也看到了这个答案,但它似乎是在模板JS中创建函数,而不是引用一个助手。

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

使用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'
  ...
});