diff --git a/packages/field/src/FormRegisteringMixin.js b/packages/field/src/FormRegisteringMixin.js index 700cf2a7d..b8277d456 100644 --- a/packages/field/src/FormRegisteringMixin.js +++ b/packages/field/src/FormRegisteringMixin.js @@ -13,6 +13,11 @@ export const FormRegisteringMixin = dedupeMixin( superclass => // eslint-disable-next-line no-shadow, no-unused-vars class FormRegisteringMixin extends superclass { + constructor() { + super(); + this.__boundDispatchRegistration = this._dispatchRegistration.bind(this); + } + connectedCallback() { if (super.connectedCallback) { super.connectedCallback(); @@ -31,9 +36,10 @@ export const FormRegisteringMixin = dedupeMixin( if (formRegistrarManager.ready) { this._dispatchRegistration(); } else { - formRegistrarManager.addEventListener('all-forms-open-for-registration', () => { - this._dispatchRegistration(); - }); + formRegistrarManager.addEventListener( + 'all-forms-open-for-registration', + this.__boundDispatchRegistration, + ); } } @@ -44,6 +50,10 @@ export const FormRegisteringMixin = dedupeMixin( bubbles: true, }), ); + formRegistrarManager.removeEventListener( + 'all-forms-open-for-registration', + this.__boundDispatchRegistration, + ); } _unregisterFormElement() {