2015-02-11 147 views
0

我在流星有两个集合,并试图加入它们。如收藏品/ collections.js中所定义的加入使用铁路路由器的流星集合

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

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

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

铁路由器的配置(在/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中已经有一个Subscribe时?

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

在此先感谢。

回答

0

如何加入:让我给你链接来包装只是这样做:publish with relations

而且你不需要的时候发布,数据字段,如果你的路由器的负载OK,你必须waitOn与当时发布在客户端的所有数据应该是可见的,当你做Producers.find()Projects.find()

虽然waitOn requiers一个数组,所以尽量

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

我看你一直在广告'cottz:发布与 - relationsh',但它在一个dubio我们说。 [1](https://github.com/svasva/meteor-publish-with-relations/issues/25),[2](https://github.com/Goluis/cottz-publish/issues/2)。 [reywood:publish-composite](https://github.com/englue/meteor-publish-composite/issues/6)是一个更强大的软件包。另见[流星中的反应性连接](https://pinboard.in/u:dandv/b:037c63e28cb7)。 – 2015-02-11 23:59:00

+0

每时每刻都有一个关于连接的问题,这就是我现在使用的,但是我会查找你发布的包 – Sindis 2015-02-12 00:17:45

相关问题