如何在集合更新时重新呈现模板

时间:2013-04-15 20:26:55

标签: meteor

鉴于此模板

<template name="content">
  {{#each children}}
    I'm a child
  {{/each}}
  <button name="create">Create</button>
</template>

和此代码

Template.content.children = ->
  Children.find({_id: {$in: Session.get('parent').children}})

Template.content.events
  'click button' : (event) ->
    child = Children.insert({created_at: new Date()})
    Parents.update(Session.get('parent')._id, {$push: {children: child}})

如何让模板自动更新?如果发现如果我将'父'会话变量改为其他东西,然后回到原来的那个,它可以工作,我确实看到所有的孩子,但我希望它是自动的。

基本上,我只想在插入新孩子时自动更新孩子列表。但显然,我在这里做错了......也许这根本不是正确的做法?

2 个答案:

答案 0 :(得分:0)

试试这个

Template.content.children = ->
  parent = Session.get('parent')
  Children.find({_id: {$in: parent.children}})

答案 1 :(得分:0)

这应该有效:

dep = new Deps.Dependency()

Template.content.children = ->
  dep.depend()
  Children.find({_id: {$in: Session.get('parent').children}})

Template.content.events
  'click button' : (event) ->
    child = Children.insert({created_at: new Date()})
    Parents.update(Session.get('parent')._id, {$push: {children: child}})
    dep.changed()

我真的不知道为什么初始代码没有自动更新,因为集合中的更改会导致依赖函数的反应性,所以这种方法只会强制反应。

修改

我看到问题很古老,Meteor因为低于1.0而变化很大,所以它可能会露出旧版本的状态。我的回复适用于0.8.0版本。