Meteor 路由器级流星收集查找
我正在构建一个包含页面版本的应用程序。我希望用户能够访问该页面,而不必指定他们希望开始使用的版本。如果URL中没有指定版本,我想查找该页面的最新版本并重定向到它 我遇到的问题是,我无法在路由器级别进行任何集合查找,以确定我要查找的版本,因为集合根本不存在 以下是我目前的代码:Meteor 路由器级流星收集查找,meteor,iron-router,Meteor,Iron Router,我正在构建一个包含页面版本的应用程序。我希望用户能够访问该页面,而不必指定他们希望开始使用的版本。如果URL中没有指定版本,我想查找该页面的最新版本并重定向到它 我遇到的问题是,我无法在路由器级别进行任何集合查找,以确定我要查找的版本,因为集合根本不存在 以下是我目前的代码: Router.route('page', { path: '/page/:slug/:version?', onBeforeAction: function() { var versionI
Router.route('page', {
path: '/page/:slug/:version?',
onBeforeAction: function() {
var versionId = this.params.version;
if (!versionId) {
console.log('no version! oh noes!');
var p = Pages.find({slug: this.params.slug});
var newestVersion = Versions.findOne({page: p._id}, {sort: {createdAt: -1}});
versionId = newestVersion._id;
Router.redirect('page', this.params.slug, versionId);
}
this.next();
},
waitOn: function() {
return Meteor.subscribe('page', this.params.slug, this.params.state);
},
data: function() {
return {
page: Pages.findOne({slug: this.params.slug}),
version: Versions.findOne(this.params.version)
}
}
});
非常感谢任何帮助或见解 这是我找到的解决方案。问题是onBeforeAction实际上并没有等待waitOn,除非您告诉它
onBeforeAction: function() {
if (this.ready()) {
if (!this.params.version) {
var p = Pages.findOne({slug: this.params.slug}),
sortedVersions = _.sortBy(Versions.find({page: p._id}).fetch(), function(s) {
return v.createdAt;
});
var newest_version_id = sortedVersions[0]._id;
this.redirect('page', {slug: this.params.slug, state: newest_version_id});
}
this.next();
}
}
我认为关键在于this.ready()检查,只有当waitOn中的所有订阅都为true时,该检查才为true。我假设这一切都是通过使用waitOn自动发生的。
如果(!version)
这是一个打字错误还是您的实际代码?@Kyll-typo。谢谢我重写了一点代码,使我的问题更有意义。我在问题中更正了它。在回答中陈述,而不是评论^^