Интересно, на правильном ли я здесь пути?
Цель: убедиться, что все элементы попадают в shadowDOM.
Итак, созданный вручную файл HTML
<cardts-pile>
<cardts-card>A</cardts-card>
<cardts-card>B</cardts-card>
</cardts-pile>
создает карточки в легкой модели документа <cardts-pile>
если я перенесу их в shadowDOM (конечно):
► <cardts-card>
удаляется из DOM (запускается disconnectedCallback()
)
► <cardts-card>
снова добавляется (запускается connectedCallback()
)
[см. console.log о Run Code Snipper ниже]
У меня есть более интересный код в card.connectedCallback()
при повторном подключении он в основном запускает тот же тот же код снова.
Вопросов
Можно ли перемещать узлы без изменения DOM?
Есть ли код OOTB, чтобы проверить, перемещается ли только существующий
<cardts-card>
,
чтобыconnectedCallback
знал, что ему не нужно запускать код снова.Должен ли я сделать что-то другое,
заставить эти элементы lightDOM немедленно оказаться в shadowDOM?
customElements.define('cardts-pile', class extends HTMLElement {
constructor(){
super();
this.attachShadow({mode: 'open'}).innerHTML='<slot></slot>';
}
connectedCallback() {
console.log('connect pile');
}
});
customElements.define('cardts-card', class extends HTMLElement {
constructor(){
super();
this.attachShadow({mode: 'open'}).innerHTML='<slot></slot>';
}
connectedCallback() {
console.log('connect card',this.innerText);
if (!this.getRootNode().host) // not in shadowDOM
this.parentNode.shadowRoot.insertBefore(this,null);//or appendChild
}
disconnectedCallback() {
console.log('disconnect card',this.innerText);
}
});
<cardts-pile>
<cardts-card>A</cardts-card>
<cardts-card>B</cardts-card>
</cardts-pile>
disconnectedCallback()
- person Danny '365CSI' Engelman   schedule 07.02.2019