以下是我的收藏代码
Competitions = new Mongo.Collection("competitions");
var CompetitionsSchema = new SimpleSchema({
year: {
type: String
},
division: {
type : String,
allowedValues: ['Elite', '1st','2nd','3rd','4th','Intro']
},
teams:{
type : [TeamSchema],
allowedValues: (function () {
return Teams.find().fetch().map(function (doc) {
return doc.name;
});
}()) //here we wrap the function as expression and invoke it
}
});
在allowedValues函数中
Teams.find为空。
在路由器中,我订阅了该出版物,如下所示
this.route('competitions', {
path: '/admin/competitions',
layoutTemplate: 'adminLayout',
waitOn: function () {
return [
Meteor.subscribe('teams')
];
}
});
这是我的发布功能
Meteor.publish('teams', function() {
return Teams.find({},{sort: {
points: -1,
netRunRate : -1
}});
});
我是否还必须在其他地方订阅?
答案 0 :(得分:1)
您的问题出在这段代码中:
allowedValues: (function () {
return Teams.find().fetch().map(function (doc) {
return doc.name;
});
}()) //here we wrap the function as expression and invoke it
页面加载时会调用此方法。此时,Teams
集合在客户端仍然是空的。您需要等到数据准备就绪。由于您在铁路由器中使用waitOn
,因此只需将此代码移至onRendered
回调即可。