2015-10-11 23 views
0

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

你能粘貼錯誤嗎? this._id是未定義的變量嗎? 語法UI._globalHelpers.results()。peFy1很好,只要上下文有效(this._id設置),當你調用它。 – JeremyK

+0

謝謝,我在瀏覽器中看到的錯誤上面添加了一些細節。至於你的其他問題,不管我是否遵循。我提到的未定義變量本身是'UI._globalHelpers',但我知道我不應該依賴Webstorm告訴我的。如果它從HTML調用時起作用,我不確定爲什麼上下文會與JS調用不同。有什麼我可以添加到這裏來排除故障? – Bren

+0

fixedDisplay定義在哪裏?什麼是固定的? – JeremyK

回答

0

您使用的UI._globalHelpers.results().peFy1看起來是正確的語法。

但是作爲迴避了流星(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功能。

+0

我知道這是一個非常基本的問題,但你在哪裏放置'getResults'代碼?現在,我在'client/lib'文件夾中有'Template.registerHelper('results')'。我可以在上面放置新塊嗎? – Bren

+0

是的,這很好,它是客戶端代碼。 – JeremyK

+0

謝謝。我已經完全重複了這一點,但仍然沒有獲得價值,現在也得到了'無法讀取未定義錯誤的屬性'ticker'。可能更多的是我缺乏經驗的功能,需要稍微挖掘一下,看看我是否可以通過它。謝謝。 – Bren

相關問題