我想要在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;
};
}
});
不知道我在这里做错了什么。 :(
请帮忙。
答案 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以显示加载指示符。