Javascript Meteor{{#if currentUser}的行为不符合预期

Javascript Meteor{{#if currentUser}的行为不符合预期,javascript,jquery,meteor,router,iron-router,Javascript,Jquery,Meteor,Router,Iron Router,我在meteor{{{#if currentUser}}块中包装了一段代码,如下所示: {{{if currentUser}{{>step1}{{else}{{{redirect}}{{/if}} {{{if currentUser}{{>step2}{{else}{{{redirect}}{{/if}} 设置:第1步,共2步 设置:第2步,共2步 currentUser为空,因为用户正在登录。因此,在检查当前用户之前,请先检查{{loggingIn}}。这可能有用,但这不是帮手应该做的 就

我在meteor{{{#if currentUser}}块中包装了一段代码,如下所示:


{{{if currentUser}{{>step1}{{else}{{{redirect}}{{/if}}
{{{if currentUser}{{>step2}{{else}{{{redirect}}{{/if}}
设置:第1步,共2步
设置:第2步,共2步

currentUser
为空,因为用户正在登录。因此,在检查当前用户之前,请先检查
{{loggingIn}}
。这可能有用,但这不是帮手应该做的


就像大卫·韦尔登说的那样,你可以使用iron:router。更具体地说,例如,
路由器.onBeforeAction

像这样创建te函数和钩子

var requireLogin = function() {
  if (! Meteor.user()) {
    if (Meteor.loggingIn()) {
      this.render(this.loadingTemplate);
    } else {
      this.render('redirect');
    }
  } else {
    this.next();
  }
}

Router.onBeforeAction(requireLogin, {only: 'setup'});
Router.onBeforeAction(requireLogin, {only: 'setup2'});
data:function(){
  if(!Meteor.userId()){
    this.render('redirect')
   }else{
    this.next();
   }
}
或者在
data:function(){}
上,如下所示

var requireLogin = function() {
  if (! Meteor.user()) {
    if (Meteor.loggingIn()) {
      this.render(this.loadingTemplate);
    } else {
      this.render('redirect');
    }
  } else {
    this.next();
  }
}

Router.onBeforeAction(requireLogin, {only: 'setup'});
Router.onBeforeAction(requireLogin, {only: 'setup2'});
data:function(){
  if(!Meteor.userId()){
    this.render('redirect')
   }else{
    this.next();
   }
}

因此,您可以删除模板帮助程序,并在路由器逻辑上执行此操作。

这正是您不应该对帮助程序执行的操作-请参阅的“过度工作的帮助程序”部分。正确的处理方法是在路由器中。