我有一些仅在有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助手。