2014-09-01 50 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目錄下的所有文件都會在任何其他文件之前加載,這意味着當您嘗試在客戶端代碼中訪問它時會定義您的變量。

一般來說,你總是希望什麼都在你的應用程序加載或執行之前定義你的收藏,因爲你的應用程序很可能會很大程度上取決於使用收集的光標。