2015-10-11 24 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

相关问题