Что такое «Template.instance (). View»? - PullRequest
0 голосов
/ 27 июня 2018

Я прочитал [Template.instance().view] 1 в Blaze docs.

Также я читаю Blaze.view().

Я даже видел объект просмотра в журнале консоли.

Но я не могу понять.

Может ли кто-нибудь объяснить это более интуитивно и плавно, пожалуйста? :)

1 Ответ

0 голосов
/ 27 июля 2018

Если вы хотите глубже понять представления, вам необходимо понять связь между шаблонами, TemplateInstances и представлениями. Представления - это просто реактивные части 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());
};
...