在没有流星启动的情况下在客户端上提供集合

时间:2013-04-24 14:47:27

标签: javascript meteor

当我在服务器上定义我的流星集合并尝试在客户端访问它们而不在任何流星提供的方法rendered, events, created, helpers ...时,如果我尝试使用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"); 实例,并在声明之前订阅。

{{1}}

1 个答案:

答案 0 :(得分:6)

您可以将Players = new Meteor.Collection("players");放在文件顶部,而不是Meteor.startup。在启动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");   
}

所以现在您不必再在PlayersMyCollection2上定义/server/client了。流星加载文件的方式将确保在其他常规文件之前定义它。如果您使用/client/server/public格式安排文件(如其他流星示例(参与方和广告))

,这可能效果最佳

编辑:正如BenjaminRH建议的那样,将文件放在/lib/collections.js中可以确保它甚至会在根项目目录中的其他文件之前加载。