Zdefiniowałem niestandardowy element i chcę wykonać skrypt tylko wtedy, gdy element niestandardowy zostanie uaktualniony do zarejestrowanego typu. Przypadek użycia polega na tym, że muszę wywołać niestandardową metodę.Sposób wykonywania skryptu po zaktualizowaniu elementu niestandardowego
Główny plik html wygląda następująco:
<project-list></project-list>
<script>
var project_list = document.getElementsByTagName("project-list")[0]
project_list.custom_method("some_data");
</script>
Element niestandardowy jest zarejestrowany w imporcie HTML tak:
<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>
Moje pytanie jest prosta: jak upewnić się, że skrypt w głównym pliku html jest wywoływana tylko po tym, jak element niestandardowy uzyskał swoją metodę custom_method
?
Szukam eleganckiego rozwiązania. Coś, o czym pomyśleliby autorzy specyfikacji. Nie mam nic przeciwko zmianie architektury (na przykład przez przeniesienie javascript z głównego pliku na inny niestandardowy element, jeśli jest to konieczne).
w przeglądarkach, które implementują specyfikację, tworzenie elementu i dołączanie go będzie synchronizowane. pod względem zakodowanych tagów jednak, afaik, nie istnieje zdarzenie "allComponentsReady" podobne do DOM. jednym ze sposobów jest podniesienie niestandardowego zdarzenia na "dokumencie" z komponentu i użycie tego zdarzenia, tak jak zdarzenie 'onload()' dla kodu strony wymagającego niestandardowych metod. możesz również zajrzeć do czegoś takiego jak redux, aby połączyć wiele odmiennych komponentów internetowych i metod aplikacji w sposób, który nie jest do dupy. – dandavis
@dandavis: Oto, co robię. Ale ustawiłem też flagę. Jeśli flaga jest ustawiona, komponent jest już skonfigurowany, a metoda niestandardowa może zostać natychmiast wykonana. W przeciwnym razie jest zaplanowane na wypadek zdarzenia. Wysłałem odpowiedź z kodem, którego używam. – MarcG
@dandavis: Aby podłączyć wiele odmiennych komponentów internetowych: jeśli jakiś składnik internetowy zależy od innych, to musi poczekać, aż WSZYSTKIE inne składniki będą gotowe, zanim ustawi/wywoła własne flagi/zdarzenia. – MarcG