根据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));
});
}
}
答案 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
引用您正在呈现的模板的特定实例。