2016-05-12 80 views
1

在我的項目中,我使用需要集合名稱的包在集合中進行一些搜索。我剛剛遷移到Meteor 1.3,現在這個軟件包不起作用。如何在Meteor 1.3中僅使用集合名稱獲取集合?

在代碼包使用類似:

const search = (collection_name) => { 
    let collection = this[collection_name] 
    ... 
} 

現在收藏是不是在全球範圍內了。 我可以將我的收藏加入global[collection_name] = Collection我的lib/collections.js,但我更願意修復軟件包以使其更加靈活,並且與Meteor 1.3兼容。

如果您只知道集合名稱,是否有可能如何獲取Mongo Collection?

+0

我相信你可以做'window [collectionName]',參見http://stackoverflow.com/a/20785981/2805154 –

+0

不,你不行。我的意思是它不會在服務器上工作,這就是爲什麼我提到'全球'。 在Meteor 1.3中,您必須手動添加到全局空間,這不是一個好的解決方案。這將迫使每個Meteor 1.3應用程序創建者(誰在使用我的軟件包)將他們的集合手動添加到全局空間。而使用ES6模塊的主要想法是儘可能地避免全局性。 – Jaro

回答

1

感謝@sashko推薦我看着https://github.com/dburles/mongo-collection-instances再到lai:collection-extensions,這裏是我如何解決它:

import { CollectionExtensions } from 'meteor/lai:collection-extensions' 

let registered_collections = {} 
CollectionExtensions.addExtension(function (name, options) { 
    registered_collections[name] = { 
    name: name, 
    instance: this, 
    options: options 
    }; 
}); 

export function getCollectionByName(collecion_name) { 
    return registered_collections[collecion_name].instance 
} 
1

不是用什麼似乎是由阿基米德的建議,如有更改,恕不另行通知私有API,相反,我建議創建一個全局對象來保存你的收藏。流星文檔具體說明:

Generally, you'll assign Mongo.Collection objects in your app to global variables. You can only create one Mongo.Collection object for each underlying Mongo collection.

所以,如果你有一個Collections全局的,你可以很容易地通過Collections[name]訪問有問題的集合。當然,你想限制你的全局變量,所以如果你現在有一個全局的應用程序,只需給它一個屬性來保存你的集合。以下是您可以適應您需求的常見模式,無論您的收藏是位於單個文件還是單獨放置。

app = app || {}; 
app.collections = { 
    // collections here 
} 
+0

不幸的是,這個解決方案是行不通的,因爲我在包中需要它,並且不想強迫其他應用程序強制使用一種或其他樣式來將集合放入全局名稱空間。 – Jaro

0

試試這個神奇的(客戶端代碼):

Meteor.connection._stores['tasks']._getCollection() 

欲瞭解更多信息結帳:

meteor/meteor#5845(in itial嘗試2015年12月)

meteor/meteor#6160(固定2016年2月)

或者,如果你喜歡的公共API,不介意另一依賴使用mongo-collection-instances如其他答覆中提到。

+0

我得到'TypeError:無法讀取屬性'_stores'的undefined'這個:( – Jaro

+0

對不起,關於這個,檢查你的流星版本,因爲這只是在2015年12月剛剛添加,但必須在2016年2月修復,我我會用更新回答的鏈接 – malhal

+0

It's Meteor 1.3.3.1 – Jaro

相關問題