我想知道为什么我需要在帮助程序中使用Template.instance()
而不是this
来访问附加到模板的属性。
这是我的问题出现的代码。
Template.myTemplate.onCreated(function () {
this.myProperty = new ReactiveVar(1);
});
Template.myTemplate.helpers({
myProperty: function () {
return Template.instance().myProperty.get(); // this works
return this.myProperty.get(); // this does not work. (this.myProperty is undefined)
}
});
我认为帮助器中的this
是对模板实例的引用。为什么第二个不起作用?
答案 0 :(得分:1)
在Template.onCreated,Template.onRendered和Template.onDestroyed下的回调体中,this
是模板实例对象。
但是,在帮助程序中,this
是使用帮助程序而不是模板实例的DOM节点的数据上下文。例如,
<强> HTML 强>
{{> myTemplate name='Max'}}
template(name='myTemplate')
ul
{{#each users}}
li {{getAvatar}}
{{/each}}
<强> JS 强>
Template.myTemplate.onCreated(function(){
console.log(this); // Template.instance()
})
Template.myTemplate.helpers {
users: function() {
console.log(this); // {name: 'Max'}
},
getAvatar: function() {
console.log(this); // {_id: ..., username: ..., profile: ..., ...}
}
}
以上是我所知道的,如果有一些错误,请指出,谢谢。
答案 1 :(得分:1)
因为内部模板助手this
引用了Template.currentData()
,而不是Template
本身。