【问题标题】:What is 'Template.instance().view'?什么是'Template.instance().view'?
【发布时间】:2019-10-25 00:30:13
【问题描述】:

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

我也读过Blaze.view()

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

但我无法理解。

谁能更直观更流畅地解释一下,好吗? :)

【问题讨论】:

  • 文档中的某些部分对您来说没有意义吗?
  • 对名为'view'的对象没有全面了解。所以我看不出它在哪里需要以及它可以在哪里使用。
  • 请再读一遍文章,它们非常清楚 Blaze.view 组件是什么。
  • 您很少需要直接与视图 API 交互,所以不理解也没有什么坏处。事实上,我想大多数 Meteor 开发者都不会!

标签: meteor meteor-blaze


【解决方案1】:

如果你想更深入地了解Views,你需要了解Templates、TemplateInstances和Views之间的关系。视图只是 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());
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 2012-10-02
    • 1970-01-01
    • 2012-06-19
    • 2011-03-10
    • 2015-06-04
    相关资源
    最近更新 更多