2013-04-21 119 views
2

有人可以澄清流星(把手)模板如何與被動源進行交互嗎? documentation已經有很多,但更系統的解釋會有所幫助。流星模板中的反應行爲

舉例來說,似乎當Session變量改變

Template.foo.rendered = function() { 
    var selectedItem = Session.get('item_selected'); 
    ... do stuff ... 
} 

我不明白爲什麼Template.rendered事件不無功源的變化作出反應以下不會觸發模板重新抽籤。我還想了解其他事件/方法是否表現出這種特殊行爲。當您設置item_selected值與

Session.set("item_selected","value"); 

Session哈希,旁邊的名字有相似Deps.depends反應依賴

回答

2

模板將重新呈現。當你改變這個會話哈希時,當前的被動上下文將失效,並且所有內容都將被重繪/重新呈現(通過Session.set調用)。

.rendered方法將被運行那裏像你一樣有var selectedItem

做有關它的工作原理究竟如何,你可以看看它演示瞭如何在EventedMind視頻非常詳細的視頻廣播,你可以使用這個新的價值Session是如何構建的以及如何使另一個變量具有反應性。

  1. http://www.eventedmind.com/posts/meteor-the-reactive-session-object
  2. http://www.eventedmind.com/posts/meteor-introducing-deps
+0

Akshat,我的問題是真的,爲什麼你描述並不適用於'Template.rendered()'事件的行爲 - 如果有其他事件/遵循相同模式的方法 – 2013-04-21 13:04:46

+0

它適用於任何地方,Template.rendered將在每個模板呈現器上被調用,這是被動上下文無效的時間:哪個被動變量會像Session一樣變化。我不太清楚你的意思是其他方法/事件的改變,因爲不需要大量的方法來重新運行,因爲只有面向模板數據/用戶的功能需要改變。此外,還可以使用Deps.autorun(function(){..})添加自定義事件,該功能在被動上下文無效時也會運行。 – Akshat 2013-04-21 13:27:01

+1

'Template.rendered'確實每次渲染模板時都會調用。但它似乎沒有註冊它所包含的反應性來源,就像其他方法一樣。換句話說:在上面的例子中,如果Session變量發生變化(並且假設它不是鏈接到模板的其他方法的一部分),則不會觸發模板呈現。 – 2013-04-21 20:13:47