如果您有onRendered
回调,则可以记录this
以获取模板。
Template.myTemplate.onRendered(function () {
console.log(this);
});
出于调试目的,在javascript控制台中,是否可以通过某种脚本获取当前呈现的模板?例如:
> var ctx = Template.myTemplate // something like this
答案 0 :(得分:11)
在Chrome(可能还有其他浏览器)中,在console.log
对象之后,您可以右键单击JavaScript控制台中的输出,然后单击“存储为全局变量”。这会将其分配给变量(名为temp1
,temp2
,依此类推)。然后,您可以通过新变量访问该对象。
同样在Chrome中,在开发人员工具中选择一个元素,使其在JavaScript控制台中以$0
的形式提供。如果全局定义以下函数:
getTemplateInstance = function (elem) {
var view = Blaze.getView(elem);
while (!view.templateInstance) {
view = view.parentView;
}
return view.templateInstance();
}
然后,您可以按照以下步骤获取任何呈现的模板实例:
getTemplateInstance($0)
以获取模板实例。如果您只是在模板顶层选择一个元素(不在{{#if}}
,{{#each}}
等内),那么您可以跳过getTemplateInstance
函数并在控制台中运行Blaze.getView($0).templateInstance()
。
您还可以使用Blaze.getData($0)
来获取元素的数据上下文。
答案 1 :(得分:3)
因为它可能有两个相同的模板,所以你明确地将它的引用传递给全局变量。
ctx = null;
Template.myTemplate.onRendered(function () {
ctx = this;
});
这应该让你在任何地方使用'ctx'。它在很大程度上取决于您使用它的位置,您可以在事件或帮助程序中获取模板实例,您可以从其自己的帮助程序或事件中获取模板实例:
Template.myTemplate.events({
'click #something': function(e,tmpl) {
console.log(tmpl) //The template instance
console.log(Template.instance()) //just like tmpl
}
});
Template.myTemplate.helpers({
'somehelper': function() {
console.log(Template.instance());
}
});