我正试图让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
有什么想法吗?
答案 0 :(得分:1)
我相信SyncedCron
会写入cronHistory
集合,但不会导出集合句柄。根据{{3}},该集合应该可以通过SyncedCron._collection
访问。
鉴于此,您应该能够:
Meteor.startup(function () {
var root = Meteor.isClient ? window : global;
root.CronHistory = SyncedCron._collection;
root.CronHistory.attachSchema(...);
});
更新回答
根据我们下面的对话,这只是一个非常难的问题。您有两个软件包,您的应用程序都定义和使用集合,并且排序需要精确到一切工作。这就是我要做的事情:
定义一个CronHistory
集合就像您在应用中的任何其他集合一样,并像平常一样附加架构。
将CronHistory
与您应用中的其余收藏品一起添加到AdminConfig
。
使用SyncedCron
CronHistory
并修改它以查找全局定义的new Mongo.Collection(options.collectionName);
集合。有关提示,请参阅this。请注意,您需要删除Service
行。