2015-10-15 39 views
0

我試圖在onRendered回調中設置一個變量,該變量等於來自active全局幫助程序的值。我的全球助手定義如下:我可以使用全局幫助器將數據傳遞給onRendered?

客戶端/ lib目錄/ helpers.js

//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; 

但我無法弄清楚如何從邏輯在active幫手產生的價值。我認爲這將是var valuationActive = active();,但返回not defined。我也看到this answer,但它似乎是在模板JS中創建函數,而不是引用助手。

我確定這是我如何調用函數的一個基本錯誤。謝謝。

回答

0

使用Blaze._globalHelpers.active()從客戶端的任何位置引用您的全球幫助者active

我會再次加上依靠this來傳遞你的全局幫助數據上下文是有風險的。你認爲無論如何,上下文總是會被正確設置。您可以從這一假設捍衛自己:

Template.registerHelper('active',function(id){ 
    var valuationId = id || this._id; // use the arg if provided, otherwise rely on 'this' 
    ... 
}); 
+0

撤消以前的評論,因爲我開始看到的數據來通過與'UI._globalHelpers',只需要解決我如何傳遞參數,這一點我敢肯定去你的第二點。非常感謝。 – Bren

+0

@Bren改爲使用Blaze._globalHelpers。 'UI'已被棄用。 – ffxsam

+0

用戶界面取代了以前不贊成使用的東西。雖然沒有記載'Blaze._globalHelpers'和'UI._globalHelpers'。如果在任何地方宣佈這個變化,那麼這個變化在哪 –

相關問題