2013-04-24 88 views
4

当我在服务器上定义我的流星集合并尝试在客户端访问它们而没有使用任何流星提供的方法​​3210我总是会收到一个错误,说Meteor collection not defined如果我尝试重新定义客户端的方法,我得到了Meteor collection already exists。我可以通过参考Meteor.startup()函数中的自定义集合来解决此问题。我如何参考我在客户端服务器上定义的集合。在流星文档中,可以创建两个Meteor.Collection()实例,并在声明之前进行订阅。在没有流星启动的情况下在客户端上提供集合

// okay to subscribe (and possibly receive data) before declaring 
// the client collection that will hold it. assume "allplayers" 
// publishes data from **server's "players" collection.** 
Meteor.subscribe("allplayers"); 
... 
// client queues incoming players records until ... 
... 
Players = new Meteor.Collection("players"); 

回答

6

你可以在你的档案,而不要在Meteor.startup是顶部放置Players = new Meteor.Collection("players");。确保它的你开始之前定义Meteor.subscribe

例如,您的文件可能是:

Players = new Meteor.Collection("players"); 
MyCollection2 = new Meteor.Collection("MyCollection2"); 

Meteor.subscribe("allplayers"); 
Meteor.subscribe("mycollection2"); 

..rest of stuff 

东西有点清洁剂可能是在项目中创建的根目录中包含该文件,以便其在客户端上使用没有你不必重新定义他们为每个服务器在你的项目根如collection.js可能包含

Players = new Meteor.Collection("players"); 
MyCollection2 = new Meteor.Collection("MyCollection2"); 

if(Meteor.isClient) { 
    Meteor.subscribe("allplayers"); 
    Meteor.subscribe("mycollection2"); 
} 

所以现在你不必Y上定义PlayersMyCollection2我们的/server/client了。流星加载文件的方式将确保这是在其他常规文件之前定义的。在其他流星的例子所使用的,如果你已经安排在/client/server/public格式的文件,这可能效果最好(方&待办事项)

编辑:作为BenjaminRH建议,把你的文件中/lib/collections.js保证这将是甚至在根项目目录中的其他文件之前加载。

+7

我通常把我的集合放在'/ lib/collections.js'中,'/ lib'文件夹确保它在'/ client'或'/ server'之前加载。 – BenjaminRH 2013-04-24 17:55:54

+0

是这样更好! – Akshat 2013-04-24 18:33:59

+0

@BenjaminRH如果我们把所有集合定义放在/ lib中,我可以在/ client或/ server下的任何文件中引用吗? – Warz 2013-04-24 20:49:53

相关问题