我正在构建一个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/

10-14 18:41
查看更多