我有关于模板订阅的问题。我发现,不是一个错误,而是一个不酷的行为,请考虑以下因素:
路由器(铁路由器):
this.route('test', {
path '/test/:_id'
});
然后是模板订阅:
Template.test.onCreated(function () {
this.subscribe('mydata', Router.current().params._id);
});
基本上是一个路由,其中subscribe链接到路由参数给出的id。
然后,如果我有两个这样的链接:
<a href="/test/hello">hello</a>
<a href="/test/hi">hello</a>
as / test / hello和/ test / hi共享相同的模板,onCreated from test只调用一次(onRendered相同)。这意味着订阅将存在于id:hello,但不存在于id:hi(因为onCreated被调用一次为hello)。
我避免了使用subs-manager包在路由中移动订阅的问题。然而,我很有兴趣知道如何在模板中处理这些问题(我只是更喜欢模板比路由知道他需要执行的订阅更好的想法)。
总之,如果有些人没有得到它: 两个页面,相同的路由(带参数),相同的模板,onCreated / onRendered只调用一次,但路由参数更改,所以它应该有两个订阅。但由于onCreated / onRendered仅被调用一次(因为它们共享相同的模板),因此只存在一个订阅。如何使用模板订阅方法来处理这种情况?
答案 0 :(得分:1)
您可以在onCreated
生命周期事件中使用反应计算。
Template.test.onCreated(function () {
this.autorun(function(){
var currentRouteParamId = Router.current().params._id;
this.subscribe('mydata', currentRouteParamId);
}.bind(this));
});
Router.current()
作为被动数据源,只要通过导航修改当前路线,this.autorun
的内部反应计算设置就会重新运行。
在Tracker.autorun
内拨打的订阅会自动停止并重新订阅(如果参数已修改)。