2013-04-21 117 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