我有一些仅在有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;
        };
    }


});

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

最佳答案

您应该使用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助手。

10-06 03:58