Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Meteor 路由器级流星收集查找_Meteor_Iron Router - Fatal编程技术网

Meteor 路由器级流星收集查找

Meteor 路由器级流星收集查找,meteor,iron-router,Meteor,Iron Router,我正在构建一个包含页面版本的应用程序。我希望用户能够访问该页面,而不必指定他们希望开始使用的版本。如果URL中没有指定版本,我想查找该页面的最新版本并重定向到它 我遇到的问题是,我无法在路由器级别进行任何集合查找,以确定我要查找的版本,因为集合根本不存在 以下是我目前的代码: Router.route('page', { path: '/page/:slug/:version?', onBeforeAction: function() { var versionI

我正在构建一个包含页面版本的应用程序。我希望用户能够访问该页面,而不必指定他们希望开始使用的版本。如果URL中没有指定版本,我想查找该页面的最新版本并重定向到它

我遇到的问题是,我无法在路由器级别进行任何集合查找,以确定我要查找的版本,因为集合根本不存在

以下是我目前的代码:

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。谢谢我重写了一点代码,使我的问题更有意义。我在问题中更正了它。在回答中陈述,而不是评论^^