Meteor admin显示其他包的集合

时间:2016-03-11 00:36:06

标签: javascript meteor collections cron

我正试图让Meteor Admin显示SyncedCron的条目。 Meteor Admin要求您attachSchema才能注册馆藏。我用自己的简单集合完成了这个,例如一个基本的事件集合,但无法弄清楚我如何在管理员中看到SyncedCron作业:

SyncedCron在我的应用程序中运行良好。文档说“uses a collection called cronHistory to syncronize between processes”。如果我跑:

> SyncedCron._entries
   { name: 'LExXMbhKE7bJF5nay notification 2',
 schedule: [Function],
 job: [Function],
 _timer: { clear: [Function] } },
'LExXMbhKE7bJF5nay notification 3':
 { name: 'LExXMbhKE7bJF5nay notification 3',
  schedule: [Function],
  job: [Function],
  _timer: { clear: [Function] } } }

我检查cronHistory是否存在:

Mongo.Collection.getAll();

{ name: 'cronHistory',
instance:
 { _makeNewID: [Function],
   _transform: null,
   _connection: [Object],
   _collection: [Object],
   _name: 'cronHistory',
   _driver: [Object],
   _restricted: false,
   _insecure: undefined,
   _validators: [Object],
   _prefix: '/cronHistory/',
   before: [Object],
   _hookAspects: [Object],
   after: [Object],
   hookOptions: [Object],
   direct: [Object] },
options: undefined }

所以我尝试在为Meteor Admin注册之前附加一个模式:

cronHistory.attachSchema(new SimpleSchema({
name: {
type: String,
label: "Name"
}
}));

得到错误:

ReferenceError: cronHistory is not defined

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我相信SyncedCron会写入cronHistory集合,但不会导出集合句柄。根据{{​​3}},该集合应该可以通过SyncedCron._collection访问。

鉴于此,您应该能够:

Meteor.startup(function () {
  var root = Meteor.isClient ? window : global;
  root.CronHistory = SyncedCron._collection;
  root.CronHistory.attachSchema(...);
});

更新回答

根据我们下面的对话,这只是一个非常难的问题。您有两个软件包,您的应用程序都定义和使用集合,并且排序需要精确到一切工作。这就是我要做的事情:

  1. 定义一个CronHistory集合就像您在应用中的任何其他集合一样,并像平常一样附加架构。

  2. CronHistory与您应用中的其余收藏品一起添加到AdminConfig

  3. 使用SyncedCron CronHistory并修改它以查找全局定义的new Mongo.Collection(options.collectionName);集合。有关提示,请参阅this。请注意,您需要删除Service行。