метеор до загрузки не сбрасывает монго - PullRequest
0 голосов
/ 17 мая 2019

Я пытаюсь создать игру, в которой, когда игрок закрывает свое окно, база данных монго изменяется на «player1 isactive».

Это код, который у меня есть в main.js:

window.addEventListener('beforeunload', function (e) {
   Games.update({_id : myGuy},{$set:{active : 0}});
  // Cancel the event
e.preventDefault();
  // Chrome requires returnValue to be set
  e.returnValue = '';
});

Он работает спорадически в Firefox и почти никогда в Chrome. ? Я думаю, что, возможно, метеор может изменить локальное мини-монго, но не знает, как изменить монго на сервере? (Просто мысль.)

1 Ответ

0 голосов
/ 21 мая 2019

В ответ на Jankapunkt приведенный выше код находится на стороне клиента, но у меня все еще включена «автопубликация», так что это не должно быть проблемой.

В ответ на Jimish Gamit, спасибо за информацию. Это действительно похоже на ошибку Chrome. Я попробовал окно оповещения, которое, похоже, не помогло.

window.addEventListener('beforeunload', function (e) {
Games.update({_id : myGuy},{$set:{active : 0}});
 e.preventDefault();
 return "alert" 
})

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

AFRAME.registerComponent('reset', {
    init: function() {
      document.addEventListener('keydown', (event) => {
      const keyName = event.key;
      if (keyName === 'r') {
                if (Games.findOne()) {
                  var playerId1 = Games.findOne({name: "player1"})._id;
                  var playerId2 = Games.findOne({name: "player2"})._id; 
                  Games.update({_id : playerId1},{$set:{active : 0}});
                  Games.update({_id : playerId2},{$set:{active : 0}});
                }
           }
        })
     }
  }) 
...