我可以在javascript控制台中获取当前模板吗?

时间:2015-05-26 13:28:21

标签: javascript meteor

如果您有onRendered回调,则可以记录this以获取模板。

Template.myTemplate.onRendered(function () {
  console.log(this);
});

出于调试目的,在javascript控制台中,是否可以通过某种脚本获取当前呈现的模板?例如:

> var ctx = Template.myTemplate  // something like this

2 个答案:

答案 0 :(得分:11)

在Chrome(可能还有其他浏览器)中,在console.log对象之后,您可以右键单击JavaScript控制台中的输出,然后单击“存储为全局变量”。这会将其分配给变量(名为temp1temp2,依此类推)。然后,您可以通过新变量访问该对象。

同样在Chrome中,在开发人员工具中选择一个元素,使其在JavaScript控制台中以$0的形式提供。如果全局定义以下函数:

getTemplateInstance = function (elem) {
  var view = Blaze.getView(elem);
  while (!view.templateInstance) {
    view = view.parentView;
  }
  return view.templateInstance();
}

然后,您可以按照以下步骤获取任何呈现的模板实例:

  1. 右键单击模板上的某个位置
  2. 点击“检查元素”
  3. 在开发人员工具中,切换到JavaScript控制台
  4. 输入getTemplateInstance($0)以获取模板实例。
  5. 如果您只是在模板顶层选择一个元素(不在{{#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());
     }
});