【问题标题】:Passing data dynamically to template in meteor将数据动态传递给流星中的模板
【发布时间】:2025-11-27 09:55:01
【问题描述】:

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

我的模板看起来像:

<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:无法读取未定义的属性 'events'”。如果我为事件列表定义辅助方法,如下所示:

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

然后错误消失,但在所有事件、注册事件和存档事件的所有三个选项卡中都会显示 eventsList 帮助器返回的任何内容。

请让我知道上面的代码中缺少什么。

谢谢, 阿舒

【问题讨论】:

    标签: javascript mongodb meteor


    【解决方案1】:

    尝试将{{#each events}} 更改为{{#each this}} - 模板正在其数据对象(或助手)上查找名为events 的字段,但它实际上看到的光标没有events 字段.关键字this 将使其仅将其数据对象(光标)用于#each 块。

    【讨论】: