Тип пользовательских элементов ванильного JavaScript: ошибка

Мой вопрос касается расширения HTMLElement для настраиваемого элемента.

class Foo extends HTMLElement { ... }

class Bar extends Foo { ... }

class FooBar extends Bar { ... }

Каждый из них вызывает super () в конструкторе.

Когда я определяю настраиваемый элемент с помощью Bar, я не получаю никаких ошибок

customElements.define( 'custom-tag', Bar );
or
customElements.define( 'custom-tag', class Bar extends Foo { ... } );

Я пытаюсь определить настраиваемый элемент с помощью класса FooBar.

customElements.define( 'other-custom-tag', FooBar );
or
customElements.define( 'other-custom-tag', class FooBar extends Bar { ... } );

Но я получаю

Uncaught TypeError: Failed to execute 'define' on 'CustomElementRegistry':
The provided value cannot be converted to a sequence.

Через Документы Mozilla

https://developer.mozilla.org/en-US/docs/Web/API/CustomElementRegistry/define

TypeError   The referenced constructor is not a constructor.

Я не смог найти ничего относящегося к этой проблеме ...


person sphinxplayer    schedule 27.09.2018    source источник
comment
Какая ошибка выдает customElements.define? Невозможно преобразовать в последовательность или это не конструктор?   -  person Jacob    schedule 27.09.2018
comment
не может быть преобразован в последовательность   -  person sphinxplayer    schedule 27.09.2018
comment
Я очень подозреваю, что это ошибка из-за деталей реализации вашего настраиваемого элемента. Можете ли вы опубликовать класс, для которого вы можете воспроизвести ошибку?   -  person Jacob    schedule 27.09.2018
comment
Пытаюсь воспроизвести ошибку. Я думаю, что это исходит из статического метода gethibitedAttributes.   -  person sphinxplayer    schedule 27.09.2018
comment
Можете ли вы предоставить больше кода, связанного с вашими классами? Как выглядят ваши конструкторы?   -  person Intervalia    schedule 27.09.2018


Ответы (1)


Проблема, скорее всего, в static get observedAttributes() - в моем случае я допустил глупую опечатку, используя push в массиве, который возвращает count элементов нового массива вместо самого массива (заменен на concat, работает как магия).

Другими словами, просто убедитесь, что статический геттер возвращает массив, и все в порядке ????

person rawpower    schedule 16.02.2021