Tenemos una función js que se ejecuta en DOMContentLoaded, document.addEventListener(“DOMContentLoaded”, OURFUNCTION).
Funciona bien cuando actualizas el navegador, pero nunca se muestra cuando navegas por el sitio. Supongo que es porque Discourse solo carga el DOM una vez y luego el resto se maneja con la navegación del lado del cliente, como una SPA. Así que me pregunto, ¿cómo podemos ejecutar la función en un cambio de navegación en Discourse? Solía haber formas fáciles de hacerlo a través de la API de complementos, pero esas API están obsoletas y ya no las veo utilizadas en ningún componente. ¿Hay alguna forma fácil de hacer esto todavía? ¿O necesitamos crear un componente completo solo para ejecutar algo de JavaScript ante un cambio de navegación? Gracias.
onPageChange se llama en el próximo ciclo de ejecución, así que creo que todavía se llamará después de DOMContentLoaded en la mayoría de las situaciones, pero no puedo decir que esté garantizado.
Veo usos que dependen de onPageChange y hacen cosas con elementos DOM directamente. ¿Desde dónde se dispara el evento routeDidChange por cierto (EDIT: es de ember: RouterService | 6.7.0 | Ember API Documentation)?
Estoy de acuerdo con el modificador didInsert, ¡realmente genial!
Gracias. He leído la documentación extensamente y, según mis comentarios y el seguimiento de un miembro de Discourse allí, la API de complementos es heredada y pronto será obsoleta. Por lo tanto, aunque su código podría funcionar ahora, pronto dejará de hacerlo, creo que en futuras actualizaciones. Es por eso que estoy buscando una mejor solución. Parece excesivo crear un componente de brillo para esto, así que esperaba que hubiera otro evento que quizás pudiéramos usar.
Por cierto, lo probamos con api.OnPageChange y funciona bien. Todavía no hemos encontrado un caso en el que el contenido del DOM no estuviera disponible al llamar a OnPageChange, por lo que parece que se activa después de DomContentLoaded. Pero no puedo estar 100% seguro. Gracias por tu ayuda en esto.
Oh, ok, ¿así que esta es una característica de Ember y no está relacionada con Discourse? ¿La única parte del código que está realmente relacionada con “Discourse” sería el pluginoutlet?