5

我有一些代码我只想在noUsercurrentUser.
所有这些都在导航模板中。像这样...

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


});

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

4

2 回答 2

10

您应该使用 if else 条件而不是 noUser 助手。并且为了防止在登录时显示“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 助手。

于 2014-10-26T18:21:59.777 回答
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以显示加载指示器。

于 2014-10-26T17:14:39.720 回答