我有一些代码只想在没有 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}}
block 首先显示,然后是 {{#if currentUser}}
block ,而 {{#if noUser}}
block 只是显示当没有用户时。
这是模板的帮助程序代码..
Template.navigation.helpers({
thisUser: function () {
return Meteor.user().username;
},
noUser: function () {
var user = Meteor.user();
if (!user) {
return true;
};
}
});
不知道我在这里做错了什么。 :(
请帮忙。
最佳答案
您应该使用 if else 条件而不是 noUser 帮助程序。为了防止在登录时显示“noUser” block ,您必须使用 {{ 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。
关于Meteor 需要时间才能知道是否存在 {{currentUser}},我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26575551/