它有點難以解釋,因爲他們已經改變了很多,因爲我對它有了更好的理解。
如果你有這樣的
<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
(一個特殊的內部窗口)會告訴視圖重繪而不觸及其他視圖。
我希望我已經回答了您的問題。如果您有任何更具體的信息,請您想知道,請讓我知道,如果可以,我會用這個信息編輯答案。