我试图让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


有任何想法吗?

最佳答案

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

鉴于此,您应该能够:

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




更新的答案

根据下面的对话,这只是一个非常困难的问题。您有两个程序包,您的应用程序都定义和使用了集合,并且顺序必须精确才能使所有工作正常进行。这就是我要做的:


定义CronHistory集合,就像在应用程序中打包其他任何东西一样,并像平常一样附加架构。
CronHistory与应用程序中的其他集合一起添加到您的AdminConfig中。
使用SyncedCronlocal version并对其进行修改以查找全局定义的CronHistory集合。有关某些提示,请参见this post。请注意,您需要删除new Mongo.Collection(options.collectionName);行。

09-25 13:46