什么是 'Template.instance().view'?

What is 'Template.instance().view'?

我在 Blaze 文档中阅读了 [Template.instance().view]1

我也看了Blaze.view()

我什至在控制台日志中看到了视图对象。

但是看不懂

请问有谁能更直观流畅的解释一下吗? :)

如果你想更深入地理解Views,你需要理解Templates、TemplateInstances和Views之间的关系。视图只是 DOM 的反应部分。模板实例包含一个视图,但模板可以通过创建可呈现内容的函数创建更多视图,例如 Blaze.with ({{#with}}) 或 Blaze.if ({{#if}})。然后,这些 "child" 视图将存储一个父指针,您可以使用它来重建视图树。

了解模板和视图在 Chrome 工具中的交互方式可能有助于您的理解。您可以使用任何 DOM 元素找到模板实例。这是一个让您入门的示例:

templateInstance = Blaze.findTemplate($('<some component in dom>')[0])
view = templateInstance.view

您可以像这样扩展 Blaze 以包含 findTemplate:

Blaze.findTemplate = function(elementOrView) {
  if(elementOrView == undefined) {
    return;
  }
  let view = Object.getPrototypeOf(elementOrView) === Blaze.View.prototype
              ? elementOrView
              : Blaze.getView(elementOrView);

  while (view && view.templateInstance === undefined) {
    view = view.originalParentView || view.parentView;
  }

  if (!view) {
    return;
  }

  return Tracker.nonreactive(() => view.templateInstance());
};