2016-01-30 2 views
3

При регистрации заметок о событиях в должности attachedCallback, не несет ответственности за их устранение в detachedCallback?уборка прослушивателей событий в пользовательских элементах

Как показано в минимальном образце ниже, шаблон довольно предсказуем, поэтому мне интересно, может ли браузер позаботиться об этом?

<my-element>0</my-element> 
class MyElement extends HTMLElement { 
    createdCallback() { 
     this.update = this.update.bind(this); 
    } 

    attachedCallback() { 
     this.addEventListener("click", this.update); 
    } 

    detachedCallback() { 
     this.removeEventListener("click", this.update); 
    } 

    update() { 
     this.textContent = Math.random(); 
    } 
} 

document.registerElement("my-element", { 
    prototype: MyElement.prototype 
}); 

ответ

4

Вы должны удалить Event Listeners в методе detachedCallback(), когда они присоединены к объектам, как window или document, которые будут сохраняться после жизни вашего пользовательского элемента.

Но если Event Listener прикреплен к самому Пользовательскому элементу (или к любому элементу внутри его надлежащей DOM), он будет удален в момент уничтожения его элемента владельца. То есть, в вашем примере выше, вам не нужно было бы звонить removeEventListener() против this.

+0

Отлично, вот что я надеялся услышать - спасибо! – AnC

 Смежные вопросы

  • Нет связанных вопросов^_^