Meteor访问集合中的单个项目

时间:2015-07-22 16:45:24

标签: javascript meteor

我不仅仅是Meteor,而是一般的剧本。我遇到了一个程序问题。我有一个存储时间的集合。我希望每次都在它自己的div中显示。我有这样的集合。

Timeslots = new Mongo.Collection('times');
Timeslots.insert({Time: "8:00am"});
Timeslots.insert({Time: "8:30am"});
Timeslots.insert({Time: "9:00am"});
Timeslots.insert({Time: "9:30am"});

辅助函数

Template.Available.helpers({
    'newtime': function(){
        return Timeslots.find()
    }

});

我希望每次都能访问它自己的div。因此,上午8:00的一个div为8:30等。

我的模板html是

<div class="col-sm-2 available open" id="opentime">
  <h2 class="time">                                                            
    {{#each newtime}}
    <p>{{Time}</p>
    {{/each}}
  </h2>
  <p class="text"></p><br>
  <p class="text"></p><br>
</div>

然而,我有20次20个不同的div。那么我该如何访问集合中的值。其次,我应该如何更改此模板,以便它访问正确的div?感谢您的建议和意见。我相信我离开了。

1 个答案:

答案 0 :(得分:0)

只需在每个循环中包含div:

<template name = "Available">
{{#each newtime}}
 <div class="col-sm-2 available open" id="opentime">
            <h2 class="time">                                                             
                 <p{{Time}}</p>
             </h2>
        </div>
{{/each}}
</template>

只包含一次 - 你不应该对一堆div进行硬编码,这就是流星为你做的工作! :)

这也将允许反应性,因此你可以做一些事情,比如打开另一个浏览器窗口到你的应用程序,在控制台中写Timeslots.insert({Time: "9:30am"});,如果仍然包含不安全和自动发布包,你可以看到列表更改在第一个浏览器窗口中。

编辑:发现了一些小错误,例如在模板帮助器中,你需要Timeslots.find({})括号内的额外的parens。 Aslo,在循环中,你错过了{{Time}}的括号 另外,请注意,每次流星重启时,您当前的代码都会将数据添加到数据库中,这很多。您应该检查并查看数据库中是否有任何内容,然后添加种子数据。要做到这一点:

if (Timeslots.find().count() === 0) { 
  Timeslots.insert({ time: '8:30am' });
  Timeslots.insert({ time: '9:00am' });
 }

在此期间,您始终可以使用meteor reset清除数据库。

我已经编辑了你的项目,以便把它带到我认为你想要的地方,它不完整,但它足以让你超越你所处的障碍。我拿出了一些按钮,但您可以将它们添加回来,或者更好,只需将更改调整到您自己的代码中即可。你非常接近!!该文件在这里:

https://www.dropbox.com/s/b162junes4usew4/teetimes-master.zip?dl=0

这应该足以让你开始了!