Sento di star probabilmente tralasciando qualcosa di ovvio, ma non riesco a capirlo. Ho un componente tema che carica alcuni widget e sto usando il seguente codice per ridisegnarli dopo che l’utente ha navigato a una nuova pagina (preso in prestito dai banner delle categorie)
Tuttavia, questo codice attende che la nuova pagina sia caricata per aggiornare il widget. Ciò che spero di fare è nascondere il contenuto del mio widget non appena qualcuno clicca su un link per un’altra pagina, in modo simile a come la funzionalità nativa di Discourse nasconde le cose e mostra un indicatore di caricamento immediatamente al clic.
Vedo in app\assets\javascripts\discourse\app\templates\discovery.hbs che il contenitore div osserva una variabile “loading”, ma non riesco a capire da dove provenga e come “intervenire” su di essa o osservare lo stato di caricamento nel mio widget.
Apprezzo qualsiasi risposta o semplicemente un orientamento nella direzione giusta.
@hawm Non sono sicuro che il re-render della coda sia ciò che mi serve qui, poiché non si tratta tanto di ridisegnare i miei widget, quanto piuttosto di dare ai miei widget la consapevolezza di sapere se l’applicazione globale Discourse sta caricando una nuova pagina o meno.
Sì, certo. Non sto avendo difficoltà con la sintassi if/then; quello che chiedo è se esiste un modo per verificare se Discourse sta attualmente caricando una nuova pagina.
Penso che un modo per aggirare il problema sia intervenire sulla rotta discovery utilizzando l’API modifyClass e quindi attivare un evento personalizzato.
La variabile loading proviene dalla rotta discovery che ho menzionato sopra. Il widget collegato a plugin-outlet potrebbe non essere in grado di accedervi, poiché non viene passato come argomento; ciò dipende dalla definizione di plugin-outlet.
Sono finalmente riuscito a trovare una soluzione. Ci ho messo una eternità e, a mio avviso, vale la pena integrarla nel core perché, onestamente, sembra che dovrebbe già esserci lì.
Ho aggiunto il codice qui sotto al mio componente del tema; ciò che fa è aggiungere una classe “loading” al body non appena inizia il routing e poi la rimuove non appena il routing è completato. Forse per chi conosce Ember questa cosa è semplice e ovvia, ma ci ho messo un tempo spropositato (provando un milione di cose e leggendo tutti i thread che ho trovato qui) per capirlo.
Con questo codice nel core, posso aggiungere spinner di caricamento e simili ai miei diversi widget, la cui visibilità e CSS saranno determinati dalla presenza o meno della classe CSS loading sul tag body.