Javascript 我可以使用全局帮助器将数据传递到onRendered吗?
我试图在onRendered回调中设置一个变量,该变量等于活动全局帮助器的值。我的全局助手定义如下: client/lib/helpers.jsJavascript 我可以使用全局帮助器将数据传递到onRendered吗?,javascript,meteor,Javascript,Meteor,我试图在onRendered回调中设置一个变量,该变量等于活动全局帮助器的值。我的全局助手定义如下: client/lib/helpers.js //all possible calculations// getResults = function(valuationId,targetId){ var valuation = Valuations.findOne({_id: valuationId}); var targetTicker = Companies.findOne({
//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;
但是我不知道如何从活动助手的逻辑中得到值。我认为这将是var估值活跃=活跃;但这还没有定义。我也看到了,但它似乎是在模板JS中创建函数,而不是引用助手
我确信这是我调用函数时的一个基本错误。谢谢。使用Blaze.\u globalHelpers.active来指代您的全局帮助程序,该全局帮助程序在客户端的任意位置从javascript激活
我想再次补充一点,依靠它为您的全局助手传递数据上下文是有风险的。您假设无论发生什么情况,上下文总是正确设置的。您可以通过以下方式为自己辩护:
Template.registerHelper('active',function(id){
var valuationId = id || this._id; // use the arg if provided, otherwise rely on 'this'
...
});
收回了前面的评论,因为我开始看到UI中的数据。\u globalHelpers,只需要修复我传递参数的方式,我肯定会转到第二点。非常感谢。@Bren使用Blaze.\u globalHelpers代替。UI已弃用。UI替换了先前弃用的内容。Blaze.\u globalHelpers和UI.\u globalHelpers都没有文档记录。这一变化是在哪里宣布的?