使用Meteor:在模板helper中使用helper函数的奇怪行为

Using Meteor: strange behavior using helper functions in template helpers

本文关键字:helper 函数 Meteor 使用      更新时间:2023-09-26

我在使用Meteor时遇到了一些奇怪的行为。

我在一个模板助手定义在client/。函数"percentCompleted"是client/lib/helper.js中定义的辅助函数。当我在返回行中调用"percentCompleted"时,percentCompleted会正常完成。但是,每当我在返回行之外调用percentCompleted时,控制台就会记录一个错误,表示"percentCompleted"函数未定义。为什么一个辅助函数被定义或未定义取决于它在模板助手调用??

Template.chapter.percentComplete = function(){
  if(_.isEmpty(this))
    return "";
  return percentCompleted(this)
}

这将抛出一个未定义"percentCompleted"的错误。

Template.chapter.percentComplete = function(){
  if(_.isEmpty(this))
    return "";
  var percentCompleted = percentCompleted(this)  
  return percentCompleted;
}

问题是您有一个名为percentCompleted的局部变量,该变量遮蔽了函数percentCompleted。将变量重命名为其他东西,它应该可以工作。

注意,Javascript中的局部变量声明被提升到函数的顶部,所以它的行为就像你写的:
Template.chapter.percentComplete = function(){
  var percentCompleted;
  if(_.isEmpty(this))
    return "";
  // Here we attempt to call the function in the percentCompleted
  // var, but that is undefined.
  percentCompleted = percentCompleted(this)  
  return percentCompleted;
}