2014-09-01 48 views
3

我通常遵循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

你可以依靠的事实,目录名lib总是先处理,当谈到加载顺序。

所以我可能会建议你组织你的代码如下:

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

在您的特定使用情况下,这将是好的,但是当你在你的客户端使用lib你可能会发现病例目录以及作为加载顺序规则堆栈(首先加载子目录),它将在您的项目根目录中的lib文件夹之前加载。

目前,完全控制加载顺序的唯一方法是依赖于包API,因此您必须将自己的代码作为应用程序的本地包(位于packages目录中)你的项目根目录)。

这是有道理的,因为你似乎有一个收集和主题相关的视图,加上拼接项目成一束协作本地套餐往往是一个优雅的设计模式,毕竟。

创建本地包现在是很容易的是流星0.9提供了package.js API文档。

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

1

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

一般来说,你总是希望什么都在你的应用程序加载或执行之前定义你的收藏,因为你的应用程序很可能会很大程度上取决于使用收集的光标。