我有以下全局帮手:全球帮手工作在HTML调用的时候,而不是在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调用助手时,我无法显示值,per this answer。
<div>
{{peFy1}}
</div>
Template.ValuationResults.helpers({
peFy1: function() {
return UI._globalHelpers.results().peFy1;
}
});
我试过一对夫妇写这篇其它方式但没有工作:
return UI._globalHelpers['results']().peFy1;
return Template._globalHelpers.results().peFy1;
对于它的价值,UI._globalHelpers
给出Webstorm一个错误是未解决的变量。
我认为问题可能是我没有传递任何参数给函数,但它通过HTML工作正常,所以不应该是必要的。此外,在test
助手中添加console.log(this._id)
和console.log(this.targetId)
都会返回正确的结果,因此这些结果都是有效的。
正确的代码中使用回答以下:
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;
}
});
你能粘贴错误吗? this._id是未定义的变量吗? 语法UI._globalHelpers.results()。peFy1很好,只要上下文有效(this._id设置),当你调用它。 – JeremyK
谢谢,我在浏览器中看到的错误上面添加了一些细节。至于你的其他问题,不管我是否遵循。我提到的未定义变量本身是'UI._globalHelpers',但我知道我不应该依赖Webstorm告诉我的。如果它从HTML调用时起作用,我不确定为什么上下文会与JS调用不同。有什么我可以添加到这里来排除故障? – Bren
fixedDisplay定义在哪里?什么是固定的? – JeremyK