什么是“ Template.instance()。view”?

时间:2018-06-27 05:47:45

标签: meteor meteor-blaze blaze

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

我也读了Blaze.view()

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

但是我听不懂。

请问有人可以更直观,更流畅地解释它吗? :)

1 个答案:

答案 0 :(得分:0)

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

在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());
};