Javascript 无需meteor启动即可在客户端上使用集合
当我在服务器上定义meteor集合并尝试在客户端中访问它们时,如果我尝试在客户端中重新定义该方法,则在服务器上定义meteor集合,而不使用meteor提供的任何方法,我得到的流星收藏已经存在。我可以通过在Javascript 无需meteor启动即可在客户端上使用集合,javascript,meteor,Javascript,Meteor,当我在服务器上定义meteor集合并尝试在客户端中访问它们时,如果我尝试在客户端中重新定义该方法,则在服务器上定义meteor集合,而不使用meteor提供的任何方法,我得到的流星收藏已经存在。我可以通过在Meteor.startup()函数中引用我的定制集合来解决这个问题。如何在客户端中引用我在服务器上定义的集合。在meteor文档中,可以创建两个meteor.Collection()实例,甚至在声明之前订阅 // okay to subscribe (and possibly receive
Meteor.startup()
函数中引用我的定制集合来解决这个问题。如何在客户端中引用我在服务器上定义的集合。在meteor文档中,可以创建两个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");
你可以放置
Players=newmeteor.Collection(“Players”)代码>位于文件顶部,而不在Meteor.startup中。在启动Meteor.subscribe之前,请确保其已定义
e、 g您的文件可能是:
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");
}
因此,现在您不再需要在/server
或/client
上定义玩家
或MyCollection2
。meteor加载文件的方式将确保在定义其他常规文件之前先定义该文件。如果您按照其他meteor示例(parties&todo)中使用的/client
、/server
和/public
格式对文件进行了排列,那么这可能最有效
编辑:正如BenjaminRH所建议的,将您的文件放入/lib/collections.js
可以确保它甚至比根项目目录中的其他文件更早加载。我通常将我的集合放入/lib/collections.js
,确保在/client
或/server
@BenjaminRH之前加载的/lib
文件夹如果我们将所有集合定义放在/lib中,我可以在/client或/server下的任何文件中引用吗?@Warz是此文件中定义的任何集合都可以由客户端和服务器访问。在lib目录中,它被确保在其他文件之前加载files@Warz但是请注意,使用新的变量作用域,在JavaScript文件的外部级别用var
声明的变量将是该文件的私有变量但是我很难弄清楚如何在集合定义中使用process.ENV.VAR来使用ENV_VAR(例如需要AWS密钥的CFS:S3设置)。如何将其设置为不在客户端中调用ENV_VAR?