我有以下全局幫手:全球幫手工作在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