Я пробовал это несколькими разными способами, и оба они ведут себя одинаково (код см. Ниже). Я использую пробел, если условие (и также пытался использовать помощника), чтобы проверить, вошел ли пользователь в систему, а затем отображать ссылки для входа/регистрации, если это не так. Если они есть, спрячьте их.
Что я заметил, так это то, что при начальной загрузке страницы (если они возвращаются с другого сайта) ссылки для входа/регистрации быстро отображаются перед тем, как скрыться (если пользователь все еще вошел в систему). Есть ли способ гарантировать, что никакие элементы не отображаются в представлении, если условие ложно? Мне кажется, что он должен проверять до того, как представление начнет рендеринг, а затем отображать соответствующие элементы на странице.
Спасибо за помощь! -Крис
Решение мерцания, с которым я столкнулся: я сверялся с пользователем, хотя представление отображалось быстрее, чем запрос БД. Я добавил защитное выражение (см. ниже), и это, кажется, позаботилось о мерцании.
isUserLoggedOut: function() {
var user = Meteor.user();
if(Meteor.user()) {
return user && false;
} else{
return user && true;
}
}
Попытка №1:
Template.headerTpl.helpers({
isUserLoggedIn: function() {
var user = Meteor.user();
if(user) {
return false;
} else{
return true;
}
}
});
<template name="headerTpl">
{{#if isUserLoggedIn}}
<li style="display:none;"><a href="{{pathFor 'userRegistrationFormTpl'}}" id="signup-js">Sign Up</a></li>
<li><a href="{{pathFor 'userLoginFormTpl'}}" id="login-js">Login</a></li>
{{/if}}
</template>
Попытка №2:
Template.headerTpl.helpers({
isUserLoggedIn: function() {
var user = Meteor.user();
if(user) {
return "hide";
} else{
return "show";
}
}
});
<template name="headerTpl">
<li class={{isUserLoggedIn}}><a href="{{pathFor 'userRegistrationFormTpl'}}" id="signup-js">Sign Up</a></li>
<li class={{isUserLoggedIn}}><a href="{{pathFor 'userLoginFormTpl'}}" id="login-js">Login</a></li>
</template>
Попытка №3:
{{#if currentUser}}
{{else}}
<li style="display:none;"><a href="{{pathFor 'userRegistrationFormTpl'}}" id="signup-js">Sign Up</a></li>
<li><a href="{{pathFor 'userLoginFormTpl'}}" id="login-js">Login</a></li>
{{/if}}
Попытка №4:
<template name="headerTpl">
{{#if isUserLoggedOut}}
{{> signInLinksTpl}}
{{/if}}
</template>
<template name="signInLinksTpl">
<li style="display:none;"><a href="{{pathFor 'userRegistrationFormTpl'}}" id="signup-js">Sign Up</a></li>
<li><a href="{{pathFor 'userLoginFormTpl'}}" id="login-js">Login</a></li>
</template>
Template.headerTpl.helpers({
isUserLoggedOut: function() {
if(Meteor.user()) {
return false;
} else{
return true;
}
}
});