Meteor的“Template.myTemplate.rendered”回调中的“this”是什么?

时间:2012-12-07 06:29:27

标签: meteor

根据docs.meteor,在“Template.myTemplate.rendered”回调的正文中,“this”是一个模板实例对象。

但是,当我在回调中插入“调试器”行并使用浏览器开发工具进行检查时,“this”的值为“window”。我做错了吗?

我正在使用排行榜示例 - 这是车把模板:


<template name="leaderboard">

    {{#each players}}
      {{> player}}
    {{/each}}

  {{#if selected_name}}
  <div class="details">
    <div class="name">{{selected_name}}</div>
    <input type="button" class="inc" value="Give 5 points" />
    <input type="button" class="fastclick inc" value="Give 5 points - fast" />
  </div>
  {{/if}}

  {{#unless selected_name}}
  <div class="none">Click a player to select</div>
  {{/unless}}
</template>

<template name="player">
  <div class="player {{selected}} fastclick">
    <span class="name">{{name}}</span>
    <span class="score">{{score}}</span>
  </div>
</template>

和“Template.leaderboard.rendered”回调:


  Template.leaderboard.rendered = function (){
    Meteor.defer(function() {
debugger;
      new FastClick(document.body);
      console.log("Template.leaderboard.rendered: " + JSON.stringify(this));
    });
  }

}

2 个答案:

答案 0 :(得分:1)

我认为您的问题是this位于Meteor.defer回调中,这意味着this的上下文已发生变化。尝试在变量中缓存this,然后在console.log()中输出该变量。例如:

Template.leaderboard.rendered = function (){
 var self = this; 
   Meteor.defer(function() {
    debugger;
    new FastClick(document.body);
    console.log("Template.leaderboard.rendered: " + self );
  });
 }
}

答案 1 :(得分:-1)

  

在回调体中,这是一个模板实例对象,对于此模板的出现是唯一的,并且会在重新渲染过程中持续存在。使用创建和销毁的回调来对对象执行初始化或清理。

来源:http://docs.meteor.com/#template_rendered

因此this引用您正在呈现的模板的特定实例。