上下文:我有一个用例,其中使用的组件是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>