Meteor LogginIn()显示不需要时的加载

时间:2014-11-24 03:43:44

标签: javascript meteor url-routing

我正在关注发现流星书,并且在本章的一篇章节中,我教会我使用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'});

1 个答案:

答案 0 :(得分:2)

呃,那段代码可以使用一些帮助。就像这个例子一样,我们将分开关注点并在不同的钩子中调用它们

首先,请记住,每次调用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'});

那不是更好,更易于管理吗?我不确定它将要执行哪个命令,因为我正在旅行,只是在机场输入这个...但你可以尝试交换钩子顺序,如果它没有相应的行为。