Meteor 0.8 Blaze:在DOM中添加一个反应模板?

时间:2014-06-19 13:23:11

标签: mongodb templates meteor handlebars.js

在我的应用程序中,我需要显示从流星模板呈现的无序列表,并且每个列表项都需要能够显示从同一模板呈现的子列表(如果单击),并且新添加的列表将需要能够选择进一步显示新的子列表。

原始列表和子列表在Mongo中表示如下:

{ person:"Tom", friendIds: [ id1, id2, id3] }

我需要子列表项是被动的,所以如果修改了父Mongo文档中的子列表项数据,那么子列表会显示更改。

我尝试过使用

UI.insert(UI.renderWithData(...))

在初始插入时效果很好,但不是反应性的。我还尝试了一些我在论坛中发现的其他模式,但到目前为止我都没有。

目前推荐的方法是什么,在0.8及更高版本中解决这个问题?我打算深入研究Deps的机制,试图让它发挥作用,但我担心如果我推出自己的解决方案,我将偏离Meteor方式。

1 个答案:

答案 0 :(得分:0)

我猜这是https://groups.google.com/forum/#!topic/meteor-talk/zUG9EVo3rpQ的重新发布。

我认为没有理由在此处使用UI.insert API。您应该在普通模板中执行此操作:

{{#each list}}
  <span>Name: {{person}}</span>

  {{#if expanded}}
    {{#each friendIds}}
      {{> someOtherTemplate}}
    {{/each}}
  {{else}}
    <a class="expand">Show friends</a>
  {{/if}}
{{/each}}

有这样的助手:

Template.foo.expanded = function() { return Session.equals("openedList", this._id); }

Template.foo.events({
  "click .expand": function(e) {
    e.preventDefault();
    Session.set("openedList", this._id);
  };
});