如何在EmberJS中检测一段闲置时间?

时间:2018-11-05 12:48:34

标签: ember.js

我正在尝试在我的EmberJS应用程序中检测一段时间的用户不活动状态,以便在一定时间后可以调用session.inValidate方法并撤消其身份验证。

我唯一能找到的资源是一篇文章here,在an original question中被告知我已经过时,并且没有使用当前的Ember概念。

过时的文章建议将属性添加到App对象,并在某些事件(例如mousemove)上更新该属性,但是我无法在任何一个位置找到正确设置此属性的位置app.js或配置环境。

推荐使用

ember-concurrency,但是在阅读了一些文档之后,我仍然不明白此类代码在EmberJS应用程序结构中的适合位置。

不幸的是,在给出代码示例之前,我陷入了困境。任何建议表示赞赏。

编辑:根据@hernanvicente的一个很好的问题,我将不活动定义为“无用户输入”。因此在X期间内没有mousemovekey press事件

1 个答案:

答案 0 :(得分:3)

这里的难题是 activity 的实际含义。通常,我会建议您反对。无法知道用户是否仍在浏览您的页面。

但是,如果您确实想在用户一段时间未执行某事之后执行某事,那么有趣的问题是将代码放置在何处。

>

您在这里有多个选项,但可能不是最糟糕的选择是使用应用程序控制器。您也可以使用服务,但随后需要在某处使用该服务对其进行初始化。您也可以只使用一个组件。 如果要将其与身份验证结合使用,则可以考虑使用现有的session服务。

但是,其他所有内容并非真正针对余烬。您可以将一些代码放在应用程序控制器init的钩子中并访问document.addEventListener()。然后,您可以保存时间戳记并采取相应的措施。

要想拥有一个更好的 waiting API,您可以将ember-concurrencyrestartable任务结合使用:

didSomething: task(function * () {
  yield timeout(1000); // number of miliseconds to wait
  logout();
}).restartable(),

在1秒钟未调用任务后,将在此处调用logout()。关于task concurrency and restarable can be found here的漂亮视觉演示。

Here is an ember-twiddle showing a complete example