Abbiamo una funzione js che viene eseguita su DOMContentLoaded, document.addEventListener(“DOMContentLoaded”, OURFUNCTION).
Funziona bene quando si aggiorna il browser, ma non viene mai mostrata quando si naviga nel sito. Presumo che sia perché Discourse carica il DOM una sola volta e il resto viene gestito con la navigazione lato client, come una SPA. Mi chiedo quindi, come possiamo eseguire la funzione al cambio di navigazione in Discourse stesso? C’erano modi semplici per farlo tramite l’API dei plugin, ma quelle API sono deprecate e non le vedo più utilizzate in nessun componente. Esiste ancora un modo semplice per farlo? O dobbiamo creare un intero componente solo per eseguire del JavaScript al cambio di navigazione? Grazie.
onPageChange viene chiamato nel ciclo di elaborazione successivo, quindi penso che verrà comunque chiamato dopo DOMContentLoaded nella maggior parte delle situazioni, ma non posso dire che sia garantito.
Vedo utilizzi che si basano su onPageChange e fanno cose con gli elementi DOM direttamente. Da dove viene attivato l’evento routeDidChange (EDIT: è da ember: RouterService | 6.7.0 | Ember API Documentation)?
Sono d’accordo con il modificatore didInsert, davvero ordinato!
Grazie. Ho letto attentamente la documentazione e, come indicato nei miei commenti e in un follow-up di un membro di Discourse, l’API dei plugin è legacy e verrà presto deprecata. Quindi, anche se il tuo codice potrebbe funzionare ora, si romperà presto, credo nei futuri aggiornamenti. Ecco perché sto cercando una soluzione migliore. Sembra eccessivo creare un componente Glimmer per questo, quindi speravo ci fosse un altro evento che potremmo usare.
Comunque, l’abbiamo testato con api.OnPageChange e funziona bene. Non abbiamo ancora riscontrato un caso in cui il contenuto del DOM non fosse disponibile al momento della chiamata a OnPageChange, quindi sembra che venga attivato dopo DomContentLoaded. Tuttavia, non posso esserne sicuro al 100%. Grazie per il tuo aiuto.
Oh, ok, quindi questa è una funzionalità di Ember e non è correlata a Discourse? L’unica parte nel codice che è veramente correlata a “Discourse” sarebbe il pluginoutlet?