据我所知,当我在一个铁路由器钩子里面的结果集中,就像之前:或者waitOn:一样,它工作正常,但是一旦另一条路线运行,它似乎就会被拆除。有谁知道这是发生了什么?
假设它是,这是否意味着只有在路由中保留订阅的方法是订阅除Router.map()函数之外的其他地方?
答案 0 :(得分:7)
如果要维护路由之间的订阅,则必须重新订阅。实现此目标的简单方法是使用Controllers。还值得一提的是,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”挂钩(https://github.com/EventedMind/iron-router#using-hooks):
Router.before(function() {
this.subscribe("global.sub");
});
答案 1 :(得分:4)
您可以在Router.configure
中为所有路线定义订阅:
Router.configure({
waitOn: function() {
return Meteor.subscribe('my-subscription');
}
});