我使用IronRouter对我的meteor应用程序进行了非常标准的设置。我遇到的问题是,我试图将某人重定向到基于来自第三方网站的URL中的某些令牌的页面,但是当用户通过来自Accounts.onLogin回调的用户通过Router.go发送到目的地时( “一些/好玩/ URL”); waitOn函数无休止地运行。 以下是设置的相关部分。
首先是我重定向到的路线:
Router.route("/shows/:show_acronym/sponsorships", {
name:"sponsorshipsSalesPortal",
data:function(){
return {show:Shows.findOne({acronym:this.params.show_acronym})};
},
waitOn:function(){
console.log("wait on");
return [Meteor.subscribe("show_by_acronym",this.params.show_acronym),Meteor.subscribe("catalogue_products_by_acronym", this.params.show_acronym)];
}
});
接下来是onLogin钩子的相关部分:
Accounts.onLogin(function(){
if (Session.get("showToRedirectTo")){
console.log("sending to sponsorship portal");
var ur ="/shows/"+Session.get("showToRedirectTo")+"/sponsorships"
return Router.go(ur);
}
});
当它点击重定向时,网址会发生变化,并且“等待”消息将永久打印在控制台中。有谁知道这个解决方案?如果可能的话,我宁愿将所有订阅保留在路由器级别。
由于
答案 0 :(得分:0)
您应该只在waitOn返回数组中返回订阅游标(Meteor.subscribe(*))。 在你的情况下,“this.params.show_acronym”是问题......
答案 1 :(得分:0)
实际上你的代码看起来不错,已经有一段时间了,因为我不使用Iron Router或Sessions。
但是看看WaitOn,看起来没问题,问题可能来自服务器端show_by_acronym
或catalogue_products_by_acronym
抛出错误,但在所有情况下这都会导致你得到一个错误spinner
永远加载,而不是永久打印console.log("wait on");
。
所以我认为你的Accounts.onLogin
导致了这一点。
尝试类似的事情。
Accounts.onLogin(function(){
if (Session.get("showToRedirectTo")){
console.log("sending to sponsorship portal");
var ur ="/shows/"+Session.get("showToRedirectTo")+"/sponsorships"
Router.go(ur);
Session.set('showToRedirectTo', false)
}
});