2013-08-21 43 views
1

在我的主要js文件中,我定義了一個「新的Meteor.Collection(」Decks「)」,如果沒有數據,我填充一些數據。如何從Meteorjs中的多個文件訪問集合?

現在我有一個在模板事件的JavaScript客戶端文件夾中的意見文件夾。每個模板都有它自己的js文件。這些事件需要查詢和更新Decks集合,但我不知道我會如何做到這一點。我嘗試在事件代碼中編寫一個「新的Meteor.Collection(」Decks「)」,但是我收到了一個集合已經存在的錯誤。

我可以想象使用requirejs將一個全局變量傳遞給這些事件,但我覺得必須有一種本地方式來在Meteor中完成它。

如何訪問不同文件中的相同集合?

舉個例子,我的應用程序被稱爲「建設者」,因此主要JS被稱爲「builder.js」,包含:

var Decks = new Meteor.Collection("Decks"); 

然後,我有另一個JavaScript文件名爲「do_other_stuff.js」客戶端文件夾,它要查詢甲板集合,所以像:

var first_deck = Decks.findOne({name: "first"}); 

但很明顯,這是行不通的,因爲甲板是不是一個全局變量。

回答

2

簡單地說,使Decks成爲一個全局變量!刪除var關鍵字:

Decks = new Meteor.Collection("Decks"); 
+0

噢,我想,因爲窗口對象是不可訪問的,我不能訪問全局變量,但在嘗試之後,我發現它們仍然可以訪問,您只是不使用窗口對象來訪問它們。非常可怕的做到這一點,所以我將不得不過渡到更好的方式,如需要... 我不知道...我覺得流星應該有這個東西,所以人們不必使用requirejs來保持他們的代碼乾淨。 我打算再等一天再找一個更好的答案,如果我沒有得到答案,請將其標記爲正確。你肯定給了我一個工作答案:)。謝謝。 –

+1

不要害怕,這是如何做到的!這一點不會導致你的代碼混亂,而試圖與流星使用require.js可以! (我已經看到了,這太糟糕了。)另外,window對象是完全可訪問的。只要確保你不要嘗試在服務器端使用它。 –

0

Meteor.subscribe("Decks")在文件中應該做的伎倆。

+0

已投票決定取消您的否決投票。確保您已分別在客戶端和服務器上分別使用Meteor.subscribe()和Meteor.publish()發佈和訂閱您的集合(當不使用流星的自動發佈包時)很可能是其他用戶的原因Collection.find()錯誤。 –

相關問題