Meteor模板事件处理程序中的“this”上下文(使用Handlebars进行模板化)
Meteor模板事件处理程序中的“this”上下文(使用Handlebars进行模板化)
关于Meteor(使用Handlebars)中模板的事件处理程序上下文的一个简短问题。
- 在模板实例文档的部分中(http://docs.meteor.com/#template_inst),提到“模板实例对象在created、rendered和destroyed模板回调以及事件处理程序的参数中作为this的值”
- 在模板部分(http://docs.meteor.com/#templates)中,它说“最后,您可以在模板函数上使用事件声明来设置事件处理程序的表格。格式在事件映射中有说明。事件处理程序的this参数将是触发事件的元素的数据上下文。”
嗯,这只有部分正确。让我们从文档中使用一个例子:
{{#each player}} {{> playerScore}} {{/each}} {{name}}: {{score}} Give points
在这里,“click .givePoints”事件处理程序的“this”上下文确实是playerScore模板实例。让我们修改一下html:
Y U NO click me? {{#each player}} {{> playerScore}} {{/each}} {{name}}: {{score}} Give points
...并为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的一些基本理解不到位?
谢谢!