2014-10-26 85 views
5

我有几个代码只有在存在noUser和几个存在currentUser时才会运行。
所有这些都在导航模板中。是这样的...流星需要时间才能知道是否存在{{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; 
     }; 
    } 


}); 

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

回答

10

您应该使用其他条件而不是使用者帮助程序。为了防止在登录时显示“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}} 

因为流星并不立即知道用户是否登录。因此你必须使用loggingIn帮助器。

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如果需要显示加载指示器。

相关问题