Meteor和Iron路由器:订阅寿命

Meteor和Iron路由器:订阅寿命,meteor,iron-router,Meteor,Iron Router,据我所知,当我在一个铁制路由器钩子中输入一个结果集时,就像以前一样:或waitOn:,它工作得很好,但似乎在另一条路由运行时就被拆掉了。有人知道这是不是真的吗 假设是,这是否意味着使订阅跨路由持久化的唯一方法是订阅Router.map()函数以外的其他位置 您可以在路由器中定义所有路由的订阅。配置: Router.configure({ waitOn: function() { return Meteor.subscribe('my-subscription');

据我所知,当我在一个铁制路由器钩子中输入一个结果集时,就像以前一样:或waitOn:,它工作得很好,但似乎在另一条路由运行时就被拆掉了。有人知道这是不是真的吗


假设是,这是否意味着使订阅跨路由持久化的唯一方法是订阅Router.map()函数以外的其他位置

您可以在
路由器中定义所有路由的订阅。配置

Router.configure({
    waitOn: function() { 
        return Meteor.subscribe('my-subscription');
    }
});

如果要维持路由之间的订阅,则必须重新订阅。实现这一点的简单方法是使用。还值得一提的是,Iron Router/Meteor足够聪明,可以知道何时在路由之间使用相同的订阅,这样它们就不会再次加载

一种方法是:

ProjectController = RouteController.extend({
    before: [
        function() {
            this.subscribe("project.comments", this.params.projectId).wait();
            this.subscribe("project.log", this.params.projectId).wait();
        }
    ]
});

Router.map(function () {
  this.route('project.overview', {
    path: '/project/:projectId/overview',
    controller: 'ProjectController'
  });

  this.route('project.tasks', {
    path: '/project/:projectId/tasks',
    controller: 'ProjectController'
  });
});
现在,“project.overview”和“project.tasks”路由将订阅“project.comments”和“project.log”

然后,您可以创建特定于路由的控制器,并从“ProjectController”扩展到特定于路由的订阅:

ProjectController = RouteController.extend({
    before: [
        function() {
            this.subscribe("project.comments", this.params.projectId).wait();
            this.subscribe("project.log", this.params.projectId).wait();
        }
    ]
});

ProjectOverviewController = ProjectController.extend({
    before: [
        function() {
            this.subscribe("project.stats", this.params.projectId).wait();
        }
    ]
});

Router.map(function () {
  this.route('project.overview', {
    path: '/project/:projectId/overview',
    controller: 'ProjectOverviewController'
  });

  this.route('project.tasks', {
    path: '/project/:projectId/tasks',
    controller: 'ProjectController'
  });
});
“project.overview”路由现在将订阅“project.comments”、“project.log”和“project.stats”

如果需要应用程序范围的订阅,另一种方法是使用“Router.before”hook():


伟大的我以前从未真正理解过整个控制器的事情,但这比我读的文档要清楚得多。因此,这是一个非常灵活的解决方案,jacksondc在下面提供了一个快速简单的解决方案,可以在您的需求更简单的情况下工作。
Router.before(function() {
    this.subscribe("global.sub");
});