Два занятия слушают одно событие.Когда ClassA получает событие, оно удаляет ClassB из DOM и добавляет его сразу после него.Обработчики событий ClassB добавляются и удаляются функциями (dis) connectedCallback.
ClassB по-прежнему замечает событие сразу после него, но больше не выполняет функцию обратного вызова.
Iпроверил обработчик событий ClassB.Он перехватывает событие и имеет ссылку на свою функцию обратного вызова, но не выполняет его.Когда я отключаю метод removeAdd()
класса А, он работает.
class ClassA {
constructor() {
window.addEventListener('TEST', this.removeAdd);
}
removeAdd() {
document.body.removeChild(testclass);
document.body.appendChild(testclass);
}
}
new ClassA();
class ClassB extends HTMLElement {
constructor() {
super();
console.log("constructed");
var shadow = this.attachShadow({mode:'open'});
shadow.appendChild(document.createElement('TEXTAREA'));
this.testEL = () => { this.test(); };
}
connectedCallback() {
console.log("connected");
window.addEventListener('TEST', () => { console.log('TEST heared', this.testEL.toString()); });
window.addEventListener('TEST', this.testEL);
}
disconnectedCallback() {
console.log("disconnected");
window.removeEventListener('TEST', this.testEL);
}
test() {
console.log('callback', this);
}
}
customElements.define('test-class', ClassB);
var testclass = new ClassB();
document.body.appendChild(testclass);
function fevent() {
var ev = new Event('TEST');
window.dispatchEvent(ev);
}
fevent();
Это вывод, когда метод removeAdd()
класса А закомментирован:
constructed
connected
TEST heared () => { this.test(); }
callback <test-class>
Этовывод с полным кодом:
constructed
connected
disconnected
connected
TEST heared () => { this.test(); }
Но он не выполняется this.testEL
.Почему?
/ edit: После дальнейших исследований я заметил, что обработчик событий завершает работу после удаления и добавления снова, поскольку даже дополнительные новые события 'TEST' не вызывают функцию обратного вызова, хотя console.log показывает, чтоссылка все еще там.