我使用Meteor和Iron-router(如果相关的话)。我已做了一些更改以适应0.8更新,我仍然在努力解决一些问题。
我没有在html中使用div中的条件属性,而是使用.rendered来设置这些属性。但是现在,当用户登录时,我必须刷新页面或导航并返回(我不认为刷新是必要的)因此元素行为正确。
根据用户是登录还是退出,当用户登录或退出时,是否有人知道如何使这些属性正常运行?
Template.pt_entry.rendered = function() {
$('#signin').popover(),
$('#reviewModal').on('shown.bs.modal', function () {
$('#review-text').focus();
});
if(Meteor.userId()){
$('#signin').attr( 'data-toggle', 'modal' ),
$('#signin').attr( 'data-target', '#reviewModal' )
} else {
$('#signin').attr( 'data-toggle', 'popover' ),
$('#signin').attr( 'data-container', 'body' ),
$('#signin').attr( 'data-content', 'you must sign in to review' ),
$('#signin').attr( 'data-trigger', 'click' )
//add some logic for displaying error template.
}
}
答案 0 :(得分:0)
实际上你有不同的选择:
如果您使用的是铁路由器,通常可以在同一路径中显示不同的模板。您可以检查用户是否已登录,并且根据此检查,您可以在模板之间切换。您可以使用beforeHook进行检查:
beforeHooks = {
isLoggedIn: function() {
if(!(Meteor.loggingIn() || Meteor.user())) {
Router.go('landingPage');
this.stop();
}
}
}
Router.onBeforeAction(beforeHooks.isLoggedIn);
另一种选择是使用默认的{{currentUser}}助手
{{#if currentUser}}
<p>User is logged in</p>
{{else}}
<p>User is not logged in</p>
{{/if}}
也许你的代码无法工作的原因可能是新的火焰引擎。渲染回调仅在Blaze时触发。通常,Meteor.userId()是一个反应式数据源,因此您的模板会被重新渲染,但是如果在未应用更改后才会触发渲染的回调。也许这些头脑会帮助你!