2015-02-11 125 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