当我将Iron Router升级到blaze集成分支时,我开始收到此警告:
"You called this.stop() inside a hook or your action function but you should use pause() now instead"
Chrome控制台 - > iron-router.js:2104 - >来自包
的client / route_controller.js:193代码在客户端:
Router.before(mustBeSignedIn, {except: ['userSignin', 'userSignup', 'home']});
var mustBeSignedIn = function () {
if (!Meteor.user()) {
// render the home template
this.redirect('home');
// stop the rest of the before hooks and the action function
this.stop();
return false;
}
return true;
}
我尝试将this.stop()
替换为:pause()
,Router.pause()
和this.pause()
,但仍无效。另外我还没有在铁路由器包上找到暂停功能。
如何使用this.stop()
正确替换pause()
?
由于
答案 0 :(得分:8)
从我所知的暂停函数是你的钩子被调用的第一个参数。不是在任何地方的文档中,但这是我从代码中收集的,它似乎工作。
以下是我使用的内容:
var subscribeAllPlanItems = function (pause) {
var planId = this.params._id;
this.subscribe('revenues', planId).wait();
this.subscribe('expenses', planId).wait();
};
var waitForSubscriptions = function (pause) {
if (this.ready()) { //all the subs have come in
//NProgress.done();
setPlan(this.params._id);
} else { //all subscriptions aren't yet ready, keep waiting
//NProgress.start();
pause();
}
};
Router.map(function () {
this.route('calendar', {
path: '/calendar/:_id',
template: 'calendar',
before: [
subscribeAllPlanItems,
waitForSubscriptions
],
});
//Other routes omitted
});
var requireLogin = function (pause) {
if (Meteor.loggingIn()) { //still logging in
pause();
}
if (!Meteor.user()) { //not logged in
this.render('signIn');
pause();
} else { //logged in, life is good
console.log("requireLogin: logged in");
}
};
//This enforces login for all pages except the below ones.
Router.before(requireLogin, {
except: ['landing', 'signUp', 'signIn', 'forgotPassword', 'resetPassword']
});
答案 1 :(得分:4)
我在Github上打开了issue。这是我得到的回应:
哎呀我可能还没有改变重定向方法。只需使用Router.go,因为它现在可以正常工作。我将在下周的某个时候更改this.redirect,或者欢迎PR。如果更改挂钩中的路径,控制器现在会自动停止。您可以通过调用pause方法暂停当前运行,该方法作为参数传递给挂钩和操作函数。