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

时间:2014-04-05 15:07:30

标签: javascript html templates meteor

我使用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.
  }
}

1 个答案:

答案 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()是一个反应式数据源,因此您的模板会被重新渲染,但是如果在未应用更改后才会触发渲染的回调。也许这些头脑会帮助你!