使用Meteor:在模板助手中使用辅助函数的奇怪行为

时间:2014-06-22 16:38:43

标签: javascript templates meteor meteor-blaze meteor-helper

我使用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;
}

1 个答案:

答案 0 :(得分:0)

问题是你有一个名为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;
}