具有相同控制器的路由是订阅服务器 n 次还是只订阅一次?
Do routes with same controller subscribe to server n times or just once?
我有一个包含四个选项卡的选项卡,每个选项卡都有一个具有相同控制器的路由。
所有四个选项卡共享相同的数据,menu
,但使用数据的不同部分。
每次我点击一个选项卡,它会订阅服务器吗?
比如我第一次点击tab1
,它会联系服务器获取数据menu
,然后我点击tab2
,它会再次联系服务器获取数据menu
连我都拿到数据了?
如果是这样,我该如何避免呢?也许我应该重新设计代码,有什么好的想法吗?
MenuController = RouteController.extend({
layoutTemplate: 'menuLayout',
waitOn: function () { return Meteor.subscribe('menu', this.params._id); },
data: function () { return Menu.findOne({_id: this.params._id}) },
});
this.route('/menu/tab1', {
name: 'menu.tab1',
template: 'MenuTab1',
controller: MenuController,
});
this.route('/menu/tab2', {
name: 'menu.tab2',
template: 'MenuTab2',
controller: MenuController,
});
this.route('/menu/tab3', {
name: 'menu.tab3',
template: 'MenuTab3',
controller: MenuController,
});
this.route('/menu/tab4', {
name: 'menu.tab4',
template: 'MenuTab4',
controller: MenuController,
});
随着 IR 的成熟,这种情况有所改变。我相信在当前的实现中,如果您在使用相同参数进行相同订阅的路由之间进行更改,订阅将不会停止并再次启动。换句话说,选项卡之间的切换不应启动和停止订阅(假设 this.params._id
保持不变)。
您可以通过在 menu
发布商的第一行添加 console.log('here')
来证明(或反驳)这一点。切换选项卡时,请检查命令行控制台。如果 'here' 只打印一次,您就会得到想要的结果。
无论结果如何,subs-manager 是普遍接受的路由间缓存订阅解决方案。
我有一个包含四个选项卡的选项卡,每个选项卡都有一个具有相同控制器的路由。
所有四个选项卡共享相同的数据,menu
,但使用数据的不同部分。
每次我点击一个选项卡,它会订阅服务器吗?
比如我第一次点击tab1
,它会联系服务器获取数据menu
,然后我点击tab2
,它会再次联系服务器获取数据menu
连我都拿到数据了?
如果是这样,我该如何避免呢?也许我应该重新设计代码,有什么好的想法吗?
MenuController = RouteController.extend({
layoutTemplate: 'menuLayout',
waitOn: function () { return Meteor.subscribe('menu', this.params._id); },
data: function () { return Menu.findOne({_id: this.params._id}) },
});
this.route('/menu/tab1', {
name: 'menu.tab1',
template: 'MenuTab1',
controller: MenuController,
});
this.route('/menu/tab2', {
name: 'menu.tab2',
template: 'MenuTab2',
controller: MenuController,
});
this.route('/menu/tab3', {
name: 'menu.tab3',
template: 'MenuTab3',
controller: MenuController,
});
this.route('/menu/tab4', {
name: 'menu.tab4',
template: 'MenuTab4',
controller: MenuController,
});
随着 IR 的成熟,这种情况有所改变。我相信在当前的实现中,如果您在使用相同参数进行相同订阅的路由之间进行更改,订阅将不会停止并再次启动。换句话说,选项卡之间的切换不应启动和停止订阅(假设 this.params._id
保持不变)。
您可以通过在 menu
发布商的第一行添加 console.log('here')
来证明(或反驳)这一点。切换选项卡时,请检查命令行控制台。如果 'here' 只打印一次,您就会得到想要的结果。
无论结果如何,subs-manager 是普遍接受的路由间缓存订阅解决方案。