meteor - Cómo reemplazar apropiadamente this.stop() con pausa() en la integración de Iron Router Blaze
iron-router (2)
Cuando actualizo Iron Router para abrir la rama de integración, comencé a recibir esta advertencia:
"You called this.stop() inside a hook or your action function but you should use pause() now instead"
Consola Chrome -> iron-router.js: 2104 -> client / route_controller.js: 193 desde el paquete
El código está en el cliente:
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;
}
Intenté reemplazar this.stop()
con: pause()
, Router.pause()
y this.pause()
pero aún no funciona. Además, no he encontrado la función de pausa en el paquete iron-router.
¿Cómo reemplazo correctamente this.stop()
con pause()
?
Gracias
Abrí un problema en Github sobre esto. Aquí está la respuesta que obtuve:
Vaya, puede que aún no haya cambiado el método de redirección. Simplemente use Router.go ya que funcionará bien ahora. Cambiaré este tema. La próxima semana, en algún momento, o un RP es bienvenido. Los controladores ahora se detienen automáticamente si cambia las rutas en un gancho. Puede pausar la ejecución actual llamando al método de pausa que se pasa como parámetro a sus ganchos y funciones de acción.
Por lo que puedo decir, la función de pausa es el primer parámetro con el que se llama al anzuelo anterior. No en los documentos en ninguna parte, pero eso es lo que obtuve del código y parece que funciona.
Esto es lo que uso:
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'']
});