Ho definito un elemento personalizzato e voglio eseguire uno script solo quando l'elemento personalizzato viene aggiornato al suo tipo registrato. Il caso d'uso è che devo chiamare un metodo personalizzato.Come eseguire uno script quando si aggiorna l'elemento personalizzato
mio file html principale appare così:
<project-list></project-list>
<script>
var project_list = document.getElementsByTagName("project-list")[0]
project_list.custom_method("some_data");
</script>
L'elemento personalizzato viene registrato nel un'importazione HTML come questo:
<script>
"use strict";
var currentScript = document._currentScript || document.currentScript;
class ProjectList extends HTMLElement {
createdCallback(){
console.log("created");
}
custom_method(data) {
console.log("custom_method() OK");
console.log(data);
this.innerHTML = data;
}
}
document.registerElement("project-list", ProjectList);
</script>
mia domanda è semplice: come assicurarsi lo script nel file html principale viene chiamato solo dopo che l'elemento personalizzato ottiene il suo metodo custom_method
?
Sto cercando una soluzione elegante. Qualcosa a cui gli autori delle specifiche avrebbero pensato. Non mi interessa cambiare un po 'l'architettura (ad esempio spostando il javascript dal file principale in un altro elemento personalizzato, se necessario).
sui browser che implementano le specifiche, creando l'elemento e accodandolo sarà sincronizzato. in termini di tag hard-coded però, afaik, non esiste un evento DOM "allComponentsReady". un modo è di aumentare un evento personalizzato su 'document' dal componente, e usare quell'evento come un evento' onload() 'per il codice della pagina che richiede i metodi personalizzati. potresti anche cercare in qualcosa di simile a ricollegare molti componenti web e metodi di app disparati in un modo che non fa schifo. – dandavis
@dandavis: questo è quello che faccio. Ma ho anche impostato una bandiera. Se il flag è impostato, il componente è già impostato e il metodo personalizzato può essere eseguito immediatamente. Altrimenti, è pianificato per quando l'evento viene attivato. Ho inviato una risposta con il codice che uso. – MarcG
@dandavis: per collegare molti componenti Web disparati: se alcuni componenti Web dipendono da altri, allora deve attendere che TUTTI questi altri componenti siano pronti, prima di impostare/inviare i propri flag/eventi. – MarcG