在帮助程序中访问自定义模板属性

时间:2015-08-17 04:33:52

标签: javascript meteor

我想知道为什么我需要在帮助程序中使用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是对模板实例的引用。为什么第二个不起作用?

2 个答案:

答案 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本身。