Meteor需要时间知道是否有{{currentUser}}

met*_*tpb 5 meteor meteor-blaze meteor-accounts

我有,我想只运行时,有一些代码noUser和一些有一个时候currentUser.
所有这些都在导航模板中.像这样......

   {{#if currentUser}}  
     <li class="nav"><a href="{{pathFor 'create'}}">Post</a>  
     </li>  
     <li class="nav"><a>Ola, {{thisUser}}!</a>  
     </li>  
     <li class="nav"><a href="#" id="logout">Log Out</a>  
     </li>  
   {{/if}}  

   {{#if noUser}}  
      <li class="nav"><a href="{{pathFor 'signup'}}">Sign Up</a>  
      </li>  
      <li class="nav"><a href="{{pathFor 'login'}}">Login</a>  
      </li>  
   {{/if}}  
Run Code Online (Sandbox Code Playgroud)

所以问题是,当有一个currentUser(即我已经登录)并且我刷新页面时,{{#if noUser}}块内的代码首先显示然后是{{#if currentUser}}块,{{#if noUser}}块只是在没有用户时显示.
这是模板的帮助代码..

Template.navigation.helpers({

    thisUser: function () {
            return Meteor.user().username;

    },

    noUser: function () {
        var user = Meteor.user();

        if (!user) {
            return true;
        };
    }


});
Run Code Online (Sandbox Code Playgroud)

不知道我在这里做错了什么.:(
请帮忙.

Tom*_*nik 10

你应该使用if else条件而不是noUser helper.要防止在登录时显示"noUser"阻止,您必须使用{{loggingIn}}帮助程序.像这样的东西:

{{#if loggingIn}}
  <p>Loggin in...</p>
{{else}}
  {{#if currentUser}}  
    <li class="nav"><a href="{{pathFor 'create'}}">Post</a>  
    </li>  
    <li class="nav"><a>Ola, {{thisUser}}!</a>  
    </li>  
    <li class="nav"><a href="#" id="logout">Log Out</a>  
    </li>  
  {{else}}  
    <li class="nav"><a href="{{pathFor 'signup'}}">Sign Up</a>  
    </li>  
    <li class="nav"><a href="{{pathFor 'login'}}">Login</a>  
    </li>  
  {{/if}}
{{/if}}
Run Code Online (Sandbox Code Playgroud)

因为Meteor不会立即知道用户是否已登录.因此,您必须使用loggingIn helper.