将数据动态传递到流星中的模板

时间:2014-02-25 23:54:42

标签: javascript mongodb meteor

我想使用不同数据集的相同模板,我不知道该怎么做。

我的模板如下:

<template name="eventsList">
  <div class="event">
        {{#each events}}
          {{> eventItem}}
        {{/each}}
  </div>
</template>

我希望使用类似的东西:

<template name="dashboard">
<div class="tab-content">
        <div class="tab-pane active" id="all-events">
            {{>eventsList allEvents}}
        </div>
        <div class="tab-pane" id="my-events">
            {{>eventsList registeredEvents}}
        </div>
        <div class="tab-pane" id="archived-events">
            {{>eventsList archivedEvents}}
        </div>
    </div>
</template>

现在所有参数,即allEvents,registeredEvents和archivedEvents都是从同一个mongo db集合中获取的,但是选择标准不同,我将它们取为:

Template.eventsDashboard.allEvents = function() {
    return Events.find({scheduleDate: {$gte: new Date()}}, {sort: {scheduleDate: 1}});
}

Template.eventsDashboard.registeredEvents = function() {
    return Events.find({registeredUsers: Meteor.userId()}, {sort: {scheduleDate: 1}});
}

Template.eventsDashboard.archivedEvents = function() {
   return Events.find({scheduleDate: {$lt: new Date()}}, {sort: {scheduleDate: 1}});
}

但我在js控制台中收到一条错误,上面写着“ Deps重新计算的异常:TypeError:无法读取未定义的属性'事件'”。如果我为事件列表定义了helper方法,如下所示:

Template.eventsList.helpers({
    events: function() {
        return Events.find({scheduleDate: {$gte: new Date()}}, {sort: {scheduleDate:     1}});
    }
});

然后错误消失但在所有事件的所有三个选项卡中,显示了由eventsList帮助程序返回的已注册事件和存档事件。

请告诉我上述代码中缺少的内容。

谢谢, Aashu

1 个答案:

答案 0 :(得分:0)

尝试将{{#each events}}更改为{{#each this}} - 模板正在查找名为events的数据对象(或帮助程序)上的字段,但实际上它看到的游标不是events有一个this字段。关键字#each将使其仅使用{{1}}块的数据对象(光标)。