更新 Meteor 用户登录/注销时的条件属性

Update conditional attributes on Meteor user login/logout

本文关键字:条件 属性 注销 Meteor 用户 登录 更新      更新时间:2023-09-26

我正在使用带有Iron-router的Meteor(如果相关的话)。我已经做了一些更改以适应 0.8 更新,但我仍在为一些事情而苦苦挣扎。

我没有在 html 中的div 中使用条件属性,而是使用 .render 来设置这些属性。但是现在,当用户登录时,我必须刷新页面或导航离开并返回(我认为不需要刷新),以便元素行为正确。

有谁知道我如何根据用户登录还是注销,在用户登录或注销时立即使这些属性正确运行?

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.
  }
}

实际上你有不同的选择:

如果您使用的是铁路由器,您通常可以在同一路由中显示不同的模板。您可以检查用户是否已登录,并根据此检查在模板之间切换。你可以用 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 引擎。渲染回调只是在 Blaze 触发一次。通常 Meteor.userId() 是一个反应式数据源,因此您的模板会被重新渲染,但如果渲染的回调只是在未应用更改后触发。也许这些头脑对你有帮助!