Javascript Meteor LogginIn()在不需要时显示加载
我正在阅读《发现流星》一书,在其中一章中,作者教我使用Javascript Meteor LogginIn()在不需要时显示加载,javascript,meteor,url-routing,Javascript,Meteor,Url Routing,我正在阅读《发现流星》一书,在其中一章中,作者教我使用meteor.logginIn()方法 目标很简单,新帖子有一个提交页面,如果没有用户登录,它应该显示拒绝访问模板,否则它应该显示帖子提交模板。但如果用户登录或处于等待状态,则应显示加载模板。我按照教程的要求去做,代码看起来和书中的完全一样。但是,当用户登录时,它会正确地显示提交页面;当用户注销时,它会显示拒绝访问页面,但会显示加载模板;当我登录时,它会显示加载模板,然后还会显示提交页面。唯一的问题是,虽然它应该显示拒绝访问,但它显示的是加载
meteor.logginIn()
方法
目标很简单,新帖子有一个提交页面,如果没有用户登录,它应该显示拒绝访问模板,否则它应该显示帖子提交模板。但如果用户登录或处于等待状态,则应显示加载模板。我按照教程的要求去做,代码看起来和书中的完全一样。但是,当用户登录时,它会正确地显示提交页面;当用户注销时,它会显示拒绝访问页面,但会显示加载模板;当我登录时,它会显示加载模板,然后还会显示提交页面。唯一的问题是,虽然它应该显示拒绝访问,但它显示的是加载模板
这是路由代码
Router.route('/submit', {name: 'postSubmit'});
var requireLogin = function(){
if(!Meteor.user()){
if(Meteor.logginIn()){
this.render(this.loadingTemplate);
}else{
this.render('accessDenied');
}
}else {
this.next();
}
}
Router.onBeforeAction('dataNotFound', {only:'postPage'});
Router.onBeforeAction(requireLogin, {only:'postSubmit'});
呃,这段代码需要一些帮助。就像这个例子一样,我们将分离关注点并在不同的钩子中调用它们 首先,请记住,每次调用
onBeforeAction
时,它都会将该函数添加到。虽然不依赖于顺序始终是一个很好的实践,但是记住这一点很好
var userLoggingIn = function() {
if(Meteor.loggingIn()) {
this.render(this.loadingTemplate);
} else {
this.next(); // Done logging in? You may pass.
}
}
var requireLogin = function() {
if(!Meteor.user()) {
this.render('accessDenied');
} else {
this.next(); // User is logged in. I'll allow it.
}
}
// finally, use it.
Router.onBeforeAction([userLoggingIn, requireLogin], {only: 'postSubmit'});
Router.onBeforeAction('loading'); // built-in hook, just like dataNotFound. use in Routes with subscriptions.
Router.onBeforeAction('dataNotFound', {only:'postPage'});
这样不是更好,更容易管理吗?我不确定它将执行哪一个命令,因为我正在旅行,只是在机场把它打印出来。。但是如果钩子没有相应的行为,您可以尝试交换钩子顺序。
Meteor.loggin()
。。你确定那不是打字错误吗?它应该是Meteor.logging()。是的,我的错。。这是一个看起来很容易处理的问题。但造成错误的是打字错误。对不起,再次感谢你,我现在学到了一些新东西。