Meteor 1.4,如何访问包中用户定义的集合
Meteor 1.4, how to access a user defined collection in a package
背景:
因此,我正在为流星1.4.2创建一个带有react的管理包,这样我就可以学习如何做这类事情。管理包将只能更新用户定义的集合(插入、删除、修改(。
我在imports/api/posts.js
:下的应用程序中有这个文件
// imports/api/posts.js
import { Meteor } from 'meteor/meteor';
import { Mongo } from 'meteor/mongo';
export const Posts = new Mongo.Collection('posts');
if (Meteor.isServer) {
Meteor.publish('posts', function postsPublication() {
return Posts.find();
});
}
例如,我可以使用import { Posts } from '../imports/api/posts.js';
在应用程序中轻松访问此文件。
问题:
如何从管理包中访问相同的Posts
集合,以便插入新项目、删除项目等?
此外,我早些时候看到了这篇关于类似事情的帖子,但这是否意味着像yogiben:admin这样的包也不适用于模块系统?
理解这一点的关键是认识到一些meteor包是库,有些是此处定义的(meteor(框架的扩展。
yogiben:admin
是Meteor框架的扩展,因为它需要能够找到您编写的代码(您的集合(才能正确工作。
如何实现这一点取决于您。以前的集合是全局定义的,因此它们将被(自动/急切地(导入,并且通常在/client
或/server
目录之外,因此它们在客户端和服务器上都可以访问。
现在您可以选择在/imports
目录之外定义您的集合,并且它们仍然会被急切地导入,或者将它们导入到您的管理框架需要它们的地方。作为第三种方式,您可以要求它们附加到(服务器端(global
对象,例如作为dict(即global.myCollections = {'posts': Posts}
(,以及(在浏览器中(window
对象(带有window.myCollections = {'posts': Posts}
(。
yogiben:admin
的示例启动器repo将所有内容都保留在/imports
之外,但我怀疑,如果您只是将集合定义保留在CCD14之外,并将其余代码移到当前推荐的项目结构中,这仍然可以正常工作。
我不认为Meteor有办法在应用程序内部定义所有集合。
为了实现这一点,您可以覆盖Mongo.Collection方法,以保留对每个创建的集合的引用。
const _oldCollection = Mongo.Collection;
Mongo.Collection = function(name, options) {
const c = new _oldCollection(name, options);
Meteor.myCollections[name] = c;
return c;
};
然后将其用作:
// define new collection
new Mongo.Collection('questions');
// retrieve collection
const c = Meteor.myCollections['questions'];
在使用Mongo.Collection
定义新集合之前,请确保加载了用于覆盖CCD_15的代码。
- 在自定义mean.io包中使用angular-chart.js作为依赖项
- 有没有办法限制Meteor-alded表格包中已发布的字段
- 如何在Yii2资产捆绑包中使用JSX文件
- 如何在Angularjs中重构闭包中的重复代码
- 如何冻结函数's在闭包中的变量
- 局部变量在闭包中丢失
- 闭包中的Javascript值
- javascript,将参数传递给函数内部的闭包中的回调
- 其中是闭包中存储的变量-堆栈或堆
- Ajax控制工具包中的错误's升级后的JS文件
- 如何使用浏览器“需要”配置文件,但不将此文件包含在捆绑包中
- webpack 将 CSS 作为字符串内联到 JS 捆绑包中
- var 函数名称与函数闭包中的名称分配
- 何时在闭包中使用 typedef
- 节点包中的“需要”钩子
- Javascript,闭包中的返回函数如何与外部函数连接
- Javascript:附加字符串中的事件,闭包中的变量求值
- MEAN.js MongoDB查询中用户特定计算的属性
- URL中用户@的几个请求导致“;违反政策通知;来自Google AdSense
- Meteor 1.4,如何访问包中用户定义的集合