检测{{>}的退出事件meteor中的loginButtons}}

时间:2014-08-07 15:08:40

标签: meteor

我正在使用流星0.8.2进行项目,我已添加" accounts-ui"和"帐户密码"用于项目中的登录功能。登录模块工作正常。我很想知道,如何检测注销事件?有没有像

这样的功能
Template.loginButtons.events({

'click .logout'=function(e)
{
console.log("I logged out!");

}

}); 

2 个答案:

答案 0 :(得分:3)

没有像Meteor.onLogout这样的正式回调,但处理此问题的标准方法如下:

在模板中:

{{#if currentUser}}
  <p>logged in</p>
{{else}}
  <p>logged out</p>
{{/if}}

currentUser是一个标准的Spacebars助手,只返回当前用户,如果没有,则返回一个假值。

http://docs.meteor.com/#template_currentuser

在javascript中:

Deps.autorun(function(computation){
  var currentUser=Meteor.user();
  if(currentUser){
    console.log("logged in");
  }
  else if(!computation.firstRun){
    console.log("logged out");
  }
});

我们可以通过注册一个引用Meteor.user()的新Deps.Computation镜像tempate代码,Meteor.user()恰好是返回当前用户的被动数据源。

每当这个变量改变时(即在登录/注销时),计算将重新运行,我们可以注入我们自己的自定义代码来处理我们的webapp中的登录/注销。

编辑:正如Neil所说,计算在声明之后立即运行,在登录恢复过程可能不完整的状态下导致应用启动时无用的系统注销检测,这可能会带来不便。

我们可以使用内置的firstRun属性检测第一次计算运行,并且只有当它不是第一次运行时才执行注销逻辑。

答案 1 :(得分:1)

您希望使用Meteor.userId观看有关更改的反应函数Deps.autorun

var started = false;

Deps.autorun(function () {

  if (started && !Meteor.userId())
    console.log('I logged out!');

  started = true;
});

该函数立即运行一次,因此started可以防止将其解释为注销。