0

根据 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));
    });
  }

}
4

2 回答 2

1

我认为你的问题是thisMeteor.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 );
  });
 }
}
于 2012-12-13T20:37:04.203 回答
-1

在回调的主体中,这是一个模板实例对象,对于该模板的出现来说是唯一的,并且在重新渲染中保持不变。使用创建和销毁的回调对对象执行初始化或清理。

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

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

于 2012-12-13T20:39:26.943 回答