Siento que probablemente me esté perdiendo algo obvio aquí, pero no logro descifrarlo. Tengo un componente de tema que carga algunos widgets y estoy utilizando el siguiente código para volver a renderizarlos después de que el usuario navega a una nueva página (tomado de los banners de categoría):
Sin embargo, este código espera hasta que la nueva página se ha cargado para actualizar el widget. Lo que espero hacer es ocultar el contenido de mi widget tan pronto como alguien haga clic en un enlace a otra página, de manera similar a cómo la funcionalidad nativa de Discourse oculta elementos y muestra un spinner de carga inmediatamente al hacer clic.
Veo en app/assets/javascripts/discourse/app/templates/discovery.hbs que el contenedor div observa una variable “loading”, pero no logro averiguar de dónde proviene ni cómo “conectarme” a ella u observar el estado de carga en mi widget.
Agradecería cualquier respuesta o simplemente que me indicaran la dirección general correcta.
@hawm No estoy seguro de que la re-renderización en cola sea lo que necesito aquí, ya que esto no se trata realmente de volver a renderizar mis widgets, sino de darles a mis widgets la capacidad de detectar si la aplicación global de Discourse está cargando una nueva página.
Sí, por supuesto. No tengo problemas con la sintaxis if/then; lo que pregunto es si hay alguna manera de verificar si Discourse está cargando actualmente una nueva página.
La variable loading proviene de la ruta discovery que mencioné anteriormente. Es posible que el widget adjunto al plugin-outlet no pueda acceder a ella, ya que no se pasa como argumento; esto depende de la definición del plugin-outlet.
Logré encontrar finalmente una solución. Me llevó muchísimo tiempo y, en mi opinión, vale la pena integrarla en el núcleo, ya que sinceramente parece algo que ya debería existir allí de todos modos.
Agregué el siguiente código a mi componente del tema; lo que hace es añadir una clase “loading” al body tan pronto como comienza el enrutamiento y luego la elimina en cuanto el enrutamiento finaliza. Quizás esto sea simple u obvio para quienes conocen Ember, pero me llevó un tiempo obscenamente largo (y probar un millón de cosas + leer todos los hilos que pude encontrar aquí) para descubrirlo.
Con este código del núcleo en su lugar, puedo añadir indicadores de carga y similares a mis diferentes widgets, los cuales tendrán su CSS y visibilidad controlados por si la etiqueta body tiene o no la clase CSS loading.