全局助手在 HTML 中调用时工作,而不是在 JS 中
Global helper works when called in HTML, not in JS
我有以下全局助手:
Template.registerHelper('results',function(){
var valuationId = this._id;
var valuation = Valuations.findOne({_id: valuationId});
var targetId = this.targetId;
var targetTicker = Companies.findOne({_id:targetId}).ticker;
var targetData = CompaniesData.findOne({ticker: targetTicker});
return {
peFy1: targetData.epsFy1 * valuation.PriceEarningsFy1,
peFy2: targetData.epsFy2 * valuation.priceEarningsFy2
}
});
当我通过 HTML 调用这个助手时,就像这样,它工作正常:
<div>
{{results.peFy1}}
</div>
通过Javascript、.
调用助手时无法显示值
<div>
{{peFy1}}
</div>
Template.ValuationResults.helpers({
peFy1: function() {
return UI._globalHelpers.results().peFy1;
}
});
我试过用其他几种方式写这篇文章,但 none 有效:
return UI._globalHelpers['results']().peFy1;
return Template._globalHelpers.results().peFy1;
就其价值而言,UI._globalHelpers
在 Webstorm 中给出了一个错误,因为它是未解析的变量。
我认为问题可能是我没有将任何参数传递给该函数,但它通过 HTML 工作正常,因此没有必要。此外,在 test
帮助程序中添加 console.log(this._id)
和 console.log(this.targetId)
都 return 正确的结果,因此它们是有效的。
使用以下答案的正确代码:
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
}
};
Template.registerHelper('results',function(){
return getResults();
});
Template.Valuation.helpers({
peFy1: function() {
var valuationId = this._id;
var targetId = this.targetId;
return getResults(valuationId,targetId).peFy1;
},
peFy1: function() {
var valuationId = this._id;
var targetId = this.targetId;
return getResults(valuationId,targetId).peFy1;
}
});
您对 UI._globalHelpers.results().peFy1
的使用在语法上看起来是正确的。
然而,作为避开 Meteor (UI._globalHelpers) api 的替代选项,创建一个标准的 JavaScript 函数,如下所示:
getResults = function(){
var valuationId = this._id;
var valuation = Valuations.findOne({_id: valuationId});
var targetId = this.targetId;
var targetTicker = Companies.findOne({_id:targetId}).ticker;
console.log('targetId: ' + targetId);
console.log(Companies.findOne({_id:targetId})),
var targetData = CompaniesData.findOne({ticker: targetTicker});
return {
peFy1: targetData.epsFy1 * valuation.PriceEarningsFy1,
peFy2: targetData.epsFy2 * valuation.priceEarningsFy2
}
};
Template.registerHelper('results',function(){
return getResults();
});
在模板中使用 results
助手,在 JavaScript 中使用 getResults
函数。
我有以下全局助手:
Template.registerHelper('results',function(){
var valuationId = this._id;
var valuation = Valuations.findOne({_id: valuationId});
var targetId = this.targetId;
var targetTicker = Companies.findOne({_id:targetId}).ticker;
var targetData = CompaniesData.findOne({ticker: targetTicker});
return {
peFy1: targetData.epsFy1 * valuation.PriceEarningsFy1,
peFy2: targetData.epsFy2 * valuation.priceEarningsFy2
}
});
当我通过 HTML 调用这个助手时,就像这样,它工作正常:
<div>
{{results.peFy1}}
</div>
通过Javascript、
<div>
{{peFy1}}
</div>
Template.ValuationResults.helpers({
peFy1: function() {
return UI._globalHelpers.results().peFy1;
}
});
我试过用其他几种方式写这篇文章,但 none 有效:
return UI._globalHelpers['results']().peFy1;
return Template._globalHelpers.results().peFy1;
就其价值而言,UI._globalHelpers
在 Webstorm 中给出了一个错误,因为它是未解析的变量。
我认为问题可能是我没有将任何参数传递给该函数,但它通过 HTML 工作正常,因此没有必要。此外,在 test
帮助程序中添加 console.log(this._id)
和 console.log(this.targetId)
都 return 正确的结果,因此它们是有效的。
使用以下答案的正确代码:
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
}
};
Template.registerHelper('results',function(){
return getResults();
});
Template.Valuation.helpers({
peFy1: function() {
var valuationId = this._id;
var targetId = this.targetId;
return getResults(valuationId,targetId).peFy1;
},
peFy1: function() {
var valuationId = this._id;
var targetId = this.targetId;
return getResults(valuationId,targetId).peFy1;
}
});
您对 UI._globalHelpers.results().peFy1
的使用在语法上看起来是正确的。
然而,作为避开 Meteor (UI._globalHelpers) api 的替代选项,创建一个标准的 JavaScript 函数,如下所示:
getResults = function(){
var valuationId = this._id;
var valuation = Valuations.findOne({_id: valuationId});
var targetId = this.targetId;
var targetTicker = Companies.findOne({_id:targetId}).ticker;
console.log('targetId: ' + targetId);
console.log(Companies.findOne({_id:targetId})),
var targetData = CompaniesData.findOne({ticker: targetTicker});
return {
peFy1: targetData.epsFy1 * valuation.PriceEarningsFy1,
peFy2: targetData.epsFy2 * valuation.priceEarningsFy2
}
};
Template.registerHelper('results',function(){
return getResults();
});
在模板中使用 results
助手,在 JavaScript 中使用 getResults
函数。