MeteorJS 发布超出范围
MeteorJS publication extending beyond scope
我有以下模板:
<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
因为如果我 return 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');
});
并不是我所拥有的破坏了任何功能本身。当应用程序有大量数据需要筛选时,我只是担心效率。我在这里遗漏了什么吗?
您没有遗漏任何东西,这是 Meteor 中的正常行为。从服务器发布的数据没有作用域。一旦数据发布到客户端,所有客户端都可以访问它们,甚至浏览器控制台中的代码 运行 也可以做到这一点。
这些发布的数据只有在用于订阅它们的订阅关闭时才会在客户端清除。就像在您的示例中一样,因为您在 reportsSummary
模板中使用了 this.subscribe
,所以当 reportsSummary
被销毁时(当 onDestroyed
事件被触发时),此订阅将关闭。
Meteor 中的最佳做法是始终在 collection.find
中放置查询以获取文档。这样您的操作就明确了您希望得到什么,并防止返回不需要的文档。
我有以下模板:
<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
因为如果我 return 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');
});
并不是我所拥有的破坏了任何功能本身。当应用程序有大量数据需要筛选时,我只是担心效率。我在这里遗漏了什么吗?
您没有遗漏任何东西,这是 Meteor 中的正常行为。从服务器发布的数据没有作用域。一旦数据发布到客户端,所有客户端都可以访问它们,甚至浏览器控制台中的代码 运行 也可以做到这一点。
这些发布的数据只有在用于订阅它们的订阅关闭时才会在客户端清除。就像在您的示例中一样,因为您在 reportsSummary
模板中使用了 this.subscribe
,所以当 reportsSummary
被销毁时(当 onDestroyed
事件被触发时),此订阅将关闭。
Meteor 中的最佳做法是始终在 collection.find
中放置查询以获取文档。这样您的操作就明确了您希望得到什么,并防止返回不需要的文档。