0

我有以下模板:

<template name="reportsContent">
    <ul class="tabs">
        <li class="tabs-content" data-content="summary">
            <div class="tabs-content-wrapper">
                {{> reportsSummary }}
            </div>
        </li>
        <li class="tabs-content" data-content="patients">
            <div class="tabs-content-wrapper">
                {{> reportsPatients }}
            </div>
        </li>
    </ul>
</template>

<template name="reportsSumary">
    ....
</template>

<template name="reportsPatients">
    ....
</template>

我已将出版物附加到reportsSummary模板,但它似乎也扩展到reportsPatients模板。我不知道为什么,因为我遵循了正确的方法来定义 pubs/subs(我认为......)。

我知道它正在扩展到,reportsPatients因为如果我Appointments.find()reportsPatients助手返回而不订阅出版物,我将获得也在reportsSummary

这是我的出版物:

Meteor.publish('appointments.day.patients', function () {

    var thisMonth = new RegExp(moment().format('MMM YYYY'));

    return Appointments.find({
        date_created: { $regex: thisMonth }
    }, { fields: { date_created: 1 } });
});

这是我的订阅:

Template.reportsSummary.onCreated(function () {
    this.subscribe('appointments.day.patients');
});

这并不是说我所拥有的东西本身就破坏了任何功能。当应用程序有大量数据需要筛选时,我只是担心效率。我在这里错过了什么吗?

4

1 回答 1

0

您没有遗漏任何东西,这是 Meteor 中的正常行为。从服务器发布的数据没有范围。一旦数据发布到客户端,所有客户端都可以访问它们,即使在浏览器控制台中运行的代码也可以这样做。

这些发布的数据只有在用于订阅它们的订阅关闭时才会在客户端中清除。就像在您的示例中一样,因为您使用this.subscribe内部reportsSummary模板,所以这个订阅将在reportsSummary被销毁时关闭(当onDestroyed事件被触发时)。

Meteor 的最佳实践是始终输入查询collection.find以获取文档。这样,您的操作就明确了您期望获得的内容,并防止返回不需要的文档。

于 2016-11-27T04:54:16.283 回答