У меня есть родительский пользовательский элемент BasicSwitcher, у которого есть html-шаблон shadow dom:
const template_basic_switcher = document.createElement('template');
template_basic_switcher.innerHTML = `
<style>
@import url("https://use.fontawesome.com/releases/v5.6.3/css/all.css")
</style>
<div id = "controls-container">
<span>ON</span>
<span>OFF</span>
</div>
`;
Теперь у меня есть еще один пользовательский элемент, ModeSwitcher, унаследованный от BasicSwitcher. Там совсем другие переключатели.
Есть ли способ перезаписать только часть controls-container шаблона, при этом используя другую часть? элемент, похоже, не поддерживает какое-либо наследование.
@Supersharp, перегрузка? Вы действительно имели в виду "перезаписать"? Не могли бы вы немного уточнить?





1) Создайте класс для вашего базового пользовательского элемента с методом рендеринга() по умолчанию.
class BasicSwitcher extends HTMLElement {
render() {
this.shadowRoot.innerHTML = baseTemplate
}
}
2) Расширьте указанный выше класс для вашего унаследованного пользовательского элемента, переопределите метод render() и используйте ссылку на новый шаблон.
class ModeSwicher extends BasicSwitch () {
render() {
this.shadowRoot.innerHTML = otherTemplate
}
}
Ниже приведен рабочий фрагмент:
class BasicSwitcher extends HTMLElement {
constructor() {
super()
this.attachShadow( { mode: 'open' } )
this.render()
}
render() {
this.shadowRoot.innerHTML = BS.innerHTML
}
}
customElements.define( 'basic-switch', BasicSwitcher )
class ModeSwitcher extends BasicSwitcher {
render() {
this.shadowRoot.innerHTML = MS.innerHTML
}
}
customElements.define( 'mode-switch', ModeSwitcher )<template id=BS>
<style> :host { display: inline-block ; border: 1px solid gray } </style>
<span>Basic Switch</span>
</template>
<template id=MS>
<style> :host { display: inline-block ; border: 1px dotted blue ; color: red } </style>
<span>Mode Switch</span>
</template>
<basic-switch></basic-switch>
<mode-switch></mode-switch>Вы - очень умный человек! ВПЕЧАТЛЯЮЩИЙ!
вы можете перегрузить метод, в котором вы определяете шаблон