我正在构建一个React-Meteor Web应用程序,我需要从集合中访问特定的数据。
有三个主要组成部分,公司列表,项目列表和任务列表。当我列出所有公司时,我可以选择一个,然后显示与该公司关联的所有项目。然后,我要做的是单击一个项目,然后查看与该项目关联的所有任务。我的数据结构如下(如您所见,项目是对象的数组):
{
"_id" : "aQnrkqMi6ugEvav4a",
"owner" : "7Gp49ZCtGC9oEx3jN",
"createdAt" : ISODate("2017-05-08T15:52:27.777Z"),
"data" : {
"name" : "lkhgb",
"contacts" : [
{
...
}
],
"projects" : [
{
...
},
{
"name" : "ljhvljhvblhkjvblhkj",
"id" : "258757206",
"tasks" : [
"task1",
"task2"
]
}
]
}
}
在我的TaskList组件中,我将其导出为:
export default createContainer((props) => {
const {companyId} = props.match.params;
Meteor.subscribe('company');
return {project: Company.findOne(companyId)};
}, TaskList)
我在哪里从道具中取出companyId。我也从props中提取了projectId,但是当我查询集合时,它只是返回未定义。我已经在此处实时发布GitHub存储库-https://github.com/GlueDigiStu/ClientManager,希望对您有所帮助。
最佳答案
您确实确实订阅了服务器上的“ company”出版物。
尽管该出版物不存在。
Meteor.publish('company', function (companyId) {
const publications = [];
publications.push(Company.find(
{
_id: companyId,
},
));
return publications;
});
这将发布您想要的服务器ID。
那么来自客户端的订阅将是:
Meteor.subscribe('company', props.companyId);
如果您还有其他问题,请告诉我。
如果可以的话,我也会给你一些建议。在文档中的文档中包含文档并不是真正适合出版物。
我建议将项目和任务放入新集合中,并且仅在选择项目后才订阅任务。
关于javascript - Meteor React订阅特定的收集数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43853484/