【问题标题】:Meteor Collections with Join using Iron Router使用 Iron Router 加入的 Meteor 集合
【发布时间】:2015-02-12 07:25:06
【问题描述】:

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

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

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

当我用于查看项目的模板显示时,我希望它能够访问 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】:

    如何加入:我会给你链接到这样做的包:publish with relations

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

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

    return [Meteor.subscribe('ProjectInfo', this.params.name)];
    

    【讨论】:

    • 我看到你一直在宣传cottz:publish-with-relationsh,但它处于可疑状态。 12reywood:publish-composite 是一个更强大的包。另见reactive joins in Meteor
    • 时不时有一个关于连接的问题,这就是我现在正在使用的,但我会查找你发布的包
    猜你喜欢
    • 2017-06-17
    • 2014-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-31
    • 2015-08-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多