Это немного сложно объяснить, потому что они немного изменили его с тех пор, как я понял его лучше.
Если у вас есть такой шаблон
<template name="mytemplate">
<p>{{value1}}</p>
<p>{{value2}}</p>
</template>
и такие помощники:
Template.mytemplate.helpers({
value1: function() { return Session.get("vala"); },
value2: function() { return Session.get("valb"); },
});
Это закончится примерно так:
Template["mytemplate"] = new Template("Template.mytemplate", (function() {
var view = this;
return [HTML.P(Blaze.View(function() {
return Spacebars.mustache(view.lookup("value1"));
})), "\n ", HTML.P(Blaze.View(function() {
return Spacebars.mustache(view.lookup("value2"));
}))];
}));
Вы можете видеть, что у меня было два помощника, и теперь шаблон состоит из двух Blaze.View
, по одному для каждой области DOM, которую может изменить помощник.
Каждый помощник не обязательно будет соответствовать каждому представлению. Каждое представление представляет собой область, которая может быть изменена реактивным образом. Похоже, что это так, поскольку помощники могут изменять содержимое. У вас может быть один помощник и несколько представлений для него, а также вы можете иметь представления из других типов выражений руля, таких как {{#if}}
.
Когда каждый раздел Blaze.View
отображается на экране, каждый имеет instance
. Это означает, что вы можете иметь точно такое же представление (возможно, определенное как переменную?), но два разных значения, отображаемых на экране. Каждый может иметь экземпляр. Каждый экземпляр имеет такие методы, как:
автозапуск. Позволяет добавить реактивный метод в файл Blaze.View
. Это означает, что если вы можете добавить метод, содержащий Tracker
вычислений, которые сообщают Blaze.View
, когда перерисовывать - только представление содержимого в них.
firstNode
и lastNode
. Это дает первый элемент DOM и последний элемент DOM файла Blaze.View
. Это позволяет движку рендеринга Blaze «знать», где изменить любой HTML/DOM, если есть изменение от запуска autorun
onXXX
Это события, когда представление создается или уничтожается. В конечном итоге они переходят к шаблону, содержащему представления.
Есть и другие, но вышеперечисленные имеют значение в отношении экземпляра шаблона.
Когда вы запускаете autorun
для всего шаблона, это совершенно отдельное вычисление, поэтому вы не можете напрямую изменить DOM из this.autorun
в шаблоне. Вы должны использовать реактивную переменную, такую как установка Session.set("vala", "new value")
.
Когда вы измените Session.set("vala", "new value")
, первые Blaze.View
будут перерисованы. Это связано с тем, что у него есть .autorun
(специальный внутренний), который сообщит виду о перерисовке, не касаясь другого вида.
Надеюсь, я ответил на ваши вопросы. Если у вас есть что-то более конкретное, пожалуйста, дайте мне знать, и я отредактирую ответ с этой информацией, если смогу.
person
Tarang
schedule
11.02.2015