2014-06-19 20 views
0

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

原始列表,并且子列表以蒙戈表示这样的:

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

我所需要的子列表中的项目是反应性,所以如果父蒙戈文档中的子列表中的项目的数据被修改,则子列表显示更改。

我曾尝试使用

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

其在初始插件的伟大工程,但不具有反应性。我还尝试了一些我在论坛中发现的其他模式,但目前为止还没有一种适用于我。

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

+0

势在必行DOM操作一般是在流星错误的做法。您应该能够使用声明性模板来完成这项工作。在会话中,您可以存储哪些子列表已展开,然后在列表项的模板中,根据Session变量决定是否显示其子列表。 – user3374348

回答

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); 
    }; 
}); 
+0

谢谢,我会试试看!愚蠢的流星问题:你可以使用Template.foo.helpers()添加Template.foo.expanded函数吗?我不清楚添加助手和直接向模板对象添加函数的区别。 – user800268

+0

@ user800268是的,同样的事情。 –