我在哪里正确地将我的常数放在Meteor中

时间:2014-09-01 17:38:57

标签: meteor

我通常按照unofficial Meteor FAQ关于如何构建我的代码库,但我无法弄清楚应该把我的全局常量放在哪里。

举个例子:我有一些带有常量GUID的数据库条目,我需要在我的应用程序的许多点引用它。到目前为止,我只是将常量附加到相关集合中,这样在collections/myCollectionWithGuids.coffee中它会说:

@MyCollectionWithGuids = new Meteor.Collection "myCollectionWithGuids"

@MyCollectionWithGuids.CONSTANT_ID = "8e7c2fe3-6644-42ea-b114-df8c5211b842"

此方法运行正常,直到我需要在位于client/views/myCollectionWithGuidsView.coffee的以下代码段中使用它,其中显示:

Session.setDefault "selectedOption", MyCollectionWithGuids.CONSTANT_ID

...因为在创建集合之前正在加载文件,因此不可用。

那么我应该在哪里放置我的常量,这样它们总是首先加载而不会破坏一堆子目录?

2 个答案:

答案 0 :(得分:2)

您可以依赖这样一个事实:在加载订单时,始终首先处理目录名lib

所以我建议您按照以下方式组织代码:

lib/collections/collection.js
client/views/view.js

在您的特定用例中,这将是正常的,但是当您必须在客户端目录中使用lib以及加载顺序规则堆栈(首先加载子目录)时,您可能会发现这种情况,它将在驻留在项目根目录中的lib文件夹之前加载。

目前,完全控制加载顺序的唯一方法是依赖包API,因此您必须使您的代码片段成为应用程序的本地包(生活在{{1}中)你的项目根目录。)

这是有道理的,因为你似乎有一个集合和一个视图以某种方式相关,加上将你的项目拼接成一堆协作的本地包往往是一个优雅的设计模式。

现在,Meteor 0.9为packages API提供了文档,因此创建本地包非常简单。

http://docs.meteor.com/#packagejs

答案 1 :(得分:1)

我会将您的集合定义放在lib目录中。 File structure documentation解释了lib目录下的所有文件都在任何其他文件之前加载,这意味着当您尝试在客户端代码中访问它时,将定义您的变量。

一般来说,您总是希望在加载或执行应用程序中的任何其他内容之前定义集合,因为您的应用程序很可能在很大程度上取决于集合光标的使用。