使用Iron Router加入的流星集合

问题描述 投票:0回答:1

我在Meteor中有两个集合,并尝试加入它们。 如collections / collections.js中所定义

Producers = new Mongo.Collection('producers');
Projects = new Mongo.Collection('projects');

从概念上讲,一个生产者有0到多个项目。 一个项目必须有一个制作人。 因此,Mongo中的每个Project文档(行)中都有一个ProducerID字段。 我用Mongo数据库播种了数据。

当我显示用于查看Projects的模板时,我希望它能够访问Producer的属性。

在Iron Router的配置中(在/app.js中),我有

Router.route('project', {
  path: '/project/:name',
  template: 'project',
  waitOn: function() {
    return Meteor.subscribe('ProjectInfo', this.params.name);
  },
  data: function() {
    return Projects.find();
  }
});

我在服务器上有两个发布(在/server/publish.js中):

Meteor.publish("ProjectInfo", function(projectName) {
  return Projects.find( {name: projectName} );
});
Meteor.publish("ProducerInfo", function(producerid) {
  return Producers.find( {_id: producerid});
});

问题1:如何加入? 我绝对不想将生产者数据放入每个项目中,因为当生产者数据发生变化时,更难以更新数据库。

问题2:为什么Iron Router需要一个“data:”字段,当它在waitOn中已经有一个订阅时?

data: function() {
  return Projects.find();
}

提前致谢。

join meteor iron-router
1个回答
0
投票

如何加入:我只给您链接到做此工作的软件包: 通过关系发布

并且您在发布时不需要数据字段,如果您的路由器加载正常并且您有waitOn发布然后在客户端,那么当您执行Producers.find()Projects.find()时,所有数据都应该是可见的

虽然,waitOn需要一个数组,所以试试吧

return [Meteor.subscribe('ProjectInfo', this.params.name)];
© www.soinside.com 2019 - 2024. All rights reserved.