Как определить период бездействия в EmberJS?

Я пытаюсь обнаружить период бездействия пользователя в моем приложении EmberJS, так что через определенную продолжительность я могу вызвать метод session.inValidate и отозвать их аутентификацию.

Единственный ресурс, который я смог найти, - это статья, в которой я был изрезан в оригинальном вопросе , устарел и не использует текущие концепции Ember.

mousemove статья предложила добавить свойство к объекту App и обновить свойство для определенных событий, таких как mousemove но мне не удалось найти местоположение, чтобы правильно установить это свойство в app.js или в среде конфигурации.

рекомендуется использовать ember-параллелизм, но после просмотра какой-либо документации я все еще не понимаю, где такой код подходит в структуре приложения EmberJS.

К сожалению, я застрял в точке, прежде чем дать образец кода. Любые советы приветствуются.

Редактирование: согласно замечанию @hernanvicente, я определяю бездействие как «без ввода пользователя». Таким образом, никакие mousemove или key press события key press течение X периода

Всего 1 ответ


Трудный вопрос здесь - это то, что на самом деле означает деятельность . Вообще-то я бы посоветовал против вашей идеи. Невозможно узнать, действительно ли пользователь все еще смотрит на вашу страницу.

Однако, если вы действительно хотите что- то сделать после того, как пользователь не сделал что-то какое-то время, интересный вопрос заключается в том, где разместить свой код.

Здесь у вас несколько вариантов, но, вероятно, не самый худший вариант - использовать контроллер приложения. Вы также можете использовать службу, но тогда вам нужно использовать эту службу где-нибудь, чтобы ее инициализировать. Вы также можете просто использовать компонент. Если вы хотите связать это с аутентификацией, вы можете рассмотреть возможность использования существующей службы session .

Однако все остальное не очень специфично. Вы можете просто поместить некоторый код в контрольный init и получить доступ к document.addEventListener() . Затем вы можете просто сохранить временную метку и действовать соответственно.

Чтобы иметь немного более удобный API для ожидания, вы можете использовать ember-concurrency с restartable задачей:

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

здесь logout() после того, как задача не вызывается в течение 1 секунды. restarable можно найти приятную визуальную демонстрацию о параллелизме и restarable задачи .

Здесь приведен примерный пример .


Есть идеи?

10000