如果用户关闭窗口或标签页,如何保存对Firebase文档的更改

时间:2019-05-13 23:12:21

标签: firebase-realtime-database polymer-2.x

上下文:我有一个用例,其中使用的组件是Polymer 2.x中的firebase实时数据库。我有一个函数,可以使用firebase实时对象对某些用户活动进行转换。我使用了Polymerfire Webcomponent。

我想要的是:用户关闭标签或窗口,将数据保存到Firebase实时数据库中,然后关闭窗口。

结果:我在聚合物元素的脚本中用于窗口的beforeunload。但是无法在聚合物元素内部触发触发实时db中数据存储的方法。

我正在寻找什么: 1.一种从元素的脚本启动元素公共功能的方法。 要么 2.更好的实现在窗口/标签页上关闭保存数据的方法

谢谢。

代码:

<!DOCTYPE html>
<dom-module id="t-page">
<template is="dom-bind">
....
</template>
<script>
var myEvent = window.attachEvent || window.addEventListener;
var chkevent = window.attachEvent ? 'onbeforeunload' :
  'beforeunload'; /// make IE7, IE8 compitable

myEvent(chkevent, async function (e) { // For >=IE7, Chrome, Firefox
  var confirmationMessage = 'Are you sure to leave the page?'; // a space
  (e || window.event).returnValue = confirmationMessage;
  setTimeout(async () => {
    document.getElementById('trello-page').onCloseWindow();
  }, 2500);
  return confirmationMessage;
});

/**
 * @polymer
 * @extends HTMLElement
 */
class TPage extends Polymer.Element {

  static get is() {
    return 't-page';
  }

 ... some properties ....{ colUpdateArr{...}}

 async onCloseWindow() {
    for (var i = 0; i < this.colUpdateArr.length; i += 2) {
      var toCol = this.colUpdateArr[i];
      var fromCol = this.colUpdateArr[i + 1];
      await this.$.query.ref.child(toCol.$key).child('tasks').set(toCol.tasks);
      await this.$.query.ref.child(fromCol.$key).child('tasks').set(fromCol.tasks);
    }
  }

  } //end Polymer.Element

      window.customElements.define(TPage.is, TPage);
  </script>

</dom-module>

0 个答案:

没有答案