Meteor模板事件处理程序中的“this”上下文(使用Handlebars进行模板化)

10 浏览
0 Comments

Meteor模板事件处理程序中的“this”上下文(使用Handlebars进行模板化)

关于Meteor(使用Handlebars)中模板的事件处理程序上下文的一个简短问题。

  • 在模板实例文档的部分中(http://docs.meteor.com/#template_inst),提到“模板实例对象在created、rendered和destroyed模板回调以及事件处理程序的参数中作为this的值”
  • 在模板部分(http://docs.meteor.com/#templates)中,它说“最后,您可以在模板函数上使用事件声明来设置事件处理程序的表格。格式在事件映射中有说明。事件处理程序的this参数将是触发事件的元素的数据上下文。”

嗯,这只有部分正确。让我们从文档中使用一个例子:



在这里,“click .givePoints”事件处理程序的“this”上下文确实是playerScore模板实例。让我们修改一下html:



...并为scores模板上的.click-me添加一个事件处理程序:

Template.scores.events({
  'click .click-me': function () {
    console.log(this);
  }
});

现在,如果您点击该span,会打印出什么?是Window对象!我期望得到什么?模板对象!或者可能是数据上下文,但它既不是。然而,在回调函数内部(例如Template.scores.rendered = function(){ ... }),“this”的上下文始终是模板实例。

我想我的真正问题是:这是Handlebars、Meteor或两者之间的bug吗?

  • 还是模板文档有点不完整?
  • 还是我完全误解了文档或者对Meteor或Handlebars的一些基本理解不到位?

谢谢!

0