2015-02-11 85 views
2

據我所知,Blaze用於通過利用Tracker製作一個反應模板。我知道一個模板包含許多View對象,每個模板元素之一。Blaze視圖和模板之間的關係是什麼?

視圖是「反應模板的構建塊」,「表示DOM的反應區域」。並且(從文檔),視圖可以對應於'當前模板助手,事件處理程序,回調或自動運行'。

但我很困惑,究竟是一個視圖對象,走出查看如何與喜歡的東西Template.mytemplate.helpers(),以Template.mytemplate.autorun()。例如,每個幫助函數是否對應一個View對象?或者僅當該功能包含反應性數據源時? autorun方法適用於整個模板,View如何與具有多個View對象的整個模板關聯?

回答

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可以是ch受到幫手的衝擊。

每個助手不一定會匹配到每個視圖。每個視圖代表可以被動地改變的區域。它看起來就像是這樣,因爲幫手可以改變內容。您可以擁有一個助手和多個視圖&您還可以從其他類型的車把表達式(如{{#if}})獲取視圖。

當每個Blaze.View部分在屏幕上呈現時,每個部分都有一個instance。這意味着你可以有相同的確切視圖(可能定義爲一個變量?),但屏幕上顯示兩個不同的值。每個人都可以有一個實例。每個實例具有如下方法:

  • autorun。允許您將反應方法添加到Blaze.View。這意味着如果您可以添加一個包含Tracker計算的方法,它告訴Blaze.View何時重繪 - 僅表示其中的內容。

  • firstNodelastNode。這給出了第一個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(一個特殊的內部窗口)會告訴視圖重繪而不觸及其他視圖。

我希望我已經回答了您的問題。如果您有任何更具體的信息,請您想知道,請讓我知道,如果可以,我會用這個信息編輯答案。

相關問題