2016-05-12 47 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

相关问题