我有一个集合的两个出版物。一个发布所有数据,另一个发布用户特定数据。我想使用首页上的数据来显示一般数据和用户特定数据。 因此,Main模板包含两个子模板:
主要模板:
<template name="index">
{{> testAll }}
{{> testUser }}
</template>
模板&#39; testAll&#39;和&#39; testUser&#39;由于数据是模板特定的,因此他们有自己的订阅相应的出版物。
出版物:
Meteor.publish('dataAll', function() {
let data = Data.find({});
if (data) {
return data;
}
return this.ready();
});
Meteor.publish('dataUser', function() {
let data = Data.find({userId: this.userId});
if (data) {
return data;
}
return this.ready();
});
订阅:
testAll.js
Template.testAll.onCreated(() => {
let template = Template.instance();
template.subscribe('dataAll');
});
testUser.js
Template.testUser.onCreated(() => {
let template = Template.instance();
template.subscribe('dataUser');
});
问题:两个模板订阅的数据都可以访问,而不是作用于每个模板。
示例(条形图不应相互嵌套,而是单独显示):
问题:如何设置每个模板的范围,以便订阅的数据只能在特定模板中访问?
即使我从一个模板中删除订阅,另一个模板仍然可以访问它:
示例(已删除testUser.js的订阅):
答案 0 :(得分:1)
订阅不会创建单独的数据上下文,它们用于决定将哪些数据放在本地数据库副本中。您应该像对待任何数据库一样对待本地数据库,特别是客户端只有一个全局副本。如果要限制特定数据上下文或查询,则应在查询本身中执行此操作。换句话说,您应该永远依赖于您对本地数据库中的内容以及不是什么的知识,因为应用程序的其他部分可以影响该状态。您应该始终在特定位置查询所需的数据。
因此,在testUser
模板中,使用Data.find({userId: this.userId})
获取数据以及订阅数据。