Meteor需要时间来了解是否有{{currentUser}}

时间:2014-10-26 17:02:26

标签: 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}}  

问题是,当有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;
        };
    }


});

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

2 个答案:

答案 0 :(得分:10)

您应该使用if else条件而不是noUser helper。并且为了防止在登录时显示“noUser”阻止,您必须使用{{ loggingIn }} helper。像这样:

{{#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}}

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

答案 1 :(得分:0)

为什么不像这样重构你的代码?

{{#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}}

如果需要,您可能需要查看http://docs.meteor.com/#meteor_loggingin以显示加载指示符。