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.