据我所知,Blaze用于通过使用Tracker制作模板。我知道模板包含许多View对象,每个模板元素之一。
视图是“反应模板的构建块”,“代表DOM的反应区域”。并且(从文档中),View可以对应'当前模板助手,事件处理程序,回调或自动运行'。
但我很困惑View对象究竟是什么,以及Blaze View 如何与<{1}}或Template.mytemplate.helpers()
相关联。例如,每个辅助函数是否对应一个View对象?或者仅当功能包含反应数据源时? Template.mytemplate.autorun()
方法适用于整个模板,View如何与具有多个View对象的整个模板相关联?
答案 0 :(得分:2)
它有点难以解释,因为他们已经改变了很多,因为我更了解它。
如果你有这样的模板
<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
。这给出了Blaze.View
的第一个DOM元素和最后一个DOM元素。如果运行autorun
onXXX
这些是创建或销毁视图时的事件。这些最终会冒泡到包含视图的模板。
还有其他一些,但以上是关于Template实例的重要事项。
当您为整个模板运行autorun
时,这是一个完全独立的计算,这就是为什么您无法直接从模板中的this.autorun
更改DOM的原因。您必须使用反应变量,例如设置Session.set("vala", "new value")
。
当您更改Session.set("vala", "new value")
时,将重绘第一个Blaze.View
。这是因为它有一个.autorun
(一个特殊的内部)将告诉视图重绘而不触及另一个视图。
我希望我已经回答了你的问题。如果您有任何更具体的信息,请您知道,请告诉我,如果可以的话,我会用这些信息编辑答案。