它有点难以解释,因为他们已经改变了很多,因为我对它有了更好的理解。
如果你有这样的
<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可以是ch受到帮手的冲击。
每个助手不一定会匹配到每个视图。每个视图代表可以被动地改变的区域。它看起来就像是这样,因为帮手可以改变内容。您可以拥有一个助手和多个视图&您还可以从其他类型的车把表达式(如{{#if}}
)获取视图。
当每个Blaze.View
部分在屏幕上呈现时,每个部分都有一个instance
。这意味着你可以有相同的确切视图(可能定义为一个变量?),但屏幕上显示两个不同的值。每个人都可以有一个实例。每个实例具有如下方法:
autorun。允许您将反应方法添加到Blaze.View
。这意味着如果您可以添加一个包含Tracker
计算的方法,它告诉Blaze.View
何时重绘 - 仅表示其中的内容。
firstNode
和lastNode
。这给出了第一个DOM元素和Blaze.View
的最后一个DOM元素。这使Blaze渲染引擎能够'知道'如果从运行中改变HTML/DOM的位置,可以更改它们autorun
onXXX
这些是视图创建或销毁时的事件。这些最终会冒泡到包含视图的模板。
还有其他人,但以上是关于模板实例的问题。
当您为整个模板运行autorun
时,这是一个完全独立的计算,这就是为什么您无法直接在模板中从this.autorun
更改DOM的原因。您必须使用无功变量,例如设置Session.set("vala", "new value")
。
当您更改Session.set("vala", "new value")
时,将会重绘第一个Blaze.View
。这是因为它有一个.autorun
(一个特殊的内部窗口)会告诉视图重绘而不触及其他视图。
我希望我已经回答了您的问题。如果您有任何更具体的信息,请您想知道,请让我知道,如果可以,我会用这个信息编辑答案。