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