Meteor React订阅特定的收集数据

时间:2017-05-08 17:10:02

标签: javascript reactjs meteor

我正在构建一个React-Meteor网络应用程序,我需要访问一个集合中的特定数据。

有三个主要组件,公司列表,项目列表和任务列表。当我列出所有公司时,我可以选择一个,然后显示与该公司相关的所有项目。我想要做的是点击一个项目,看看与该项目相关的所有任务。我的数据结构如下(如您所见,项目是一个对象数组):

{
    "_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)

我把公司拉出道具。我也从道具中取消了projectId,但是当我查询该集合时,它只是返回undefined。我已经在这里发布了GitHub回购 - https://github.com/GlueDigiStu/ClientManager并希望得到任何帮助。

1 个答案:

答案 0 :(得分:0)

您确实订阅了"公司"在服务器上发布。 虽然该出版物不存在。

Meteor.publish('company', function (companyId) {
  const publications = [];
  publications.push(Company.find(
    {
      _id: companyId,
    },
  ));
  return publications;
});

这将从服务器发布您想要的ID。 然后来自客户的订阅将是:

Meteor.subscribe('company', props.companyId);

如果您有任何其他问题,请与我们联系。

如果我可以,我也会给你一些建议。在文档中包含文档中的文档对于出版物来说并不是很好。 我建议将项目和任务放入新的集合中,只有在选择项目后才能订阅任务。