J’ai l’impression qu’il me manque probablement quelque chose d’évident ici, mais je n’arrive pas à le trouver. J’ai un composant de thème qui charge quelques widgets, et j’utilise le code suivant pour les réafficher après que l’utilisateur a navigué vers une nouvelle page (emprunté aux bannières de catégorie) :
Cependant, ce code attend que la nouvelle page soit chargée pour mettre à jour le widget. Ce que j’espère faire, c’est masquer le contenu de mon widget dès que quelqu’un clique sur un lien vers une autre page, tout comme la fonctionnalité native de Discourse qui masque les éléments et affiche un indicateur de chargement immédiatement au clic.
Je vois dans app\assets\javascripts\discourse\app\templates\discovery.hbs que le conteneur div observe une variable “loading”, mais je n’arrive pas à comprendre d’où elle vient et comment m’y connecter ou observer l’état de chargement dans mon widget.
Je suis reconnaissant pour toute réponse ou simplement pour une orientation dans la bonne direction générale.
@hawm Je ne pense pas que la réactualisation de la file d’attente soit ce dont j’ai besoin ici, car il ne s’agit pas vraiment de réactualiser mes widgets, mais plutôt de permettre à mes widgets de savoir si l’application Discourse globale charge une nouvelle page ou non.
Oui, bien sûr. Je ne rencontre pas de difficultés avec la syntaxe if/then ; ce que je demande, c’est s’il existe un moyen de vérifier si Discourse est en train de charger une nouvelle page.
La variable loading provient de la route discovery que j’ai mentionnée ci-dessus. Le widget attaché à plugin-outlet pourrait ne pas pouvoir y accéder car elle n’est pas passée en tant qu’argument ; cela dépend de la définition de plugin-outlet.
D’accord, merci beaucoup. Je vais faire quelques recherches et voir ce que je trouve, et je mettrai à jour cette page avec une solution pour la postérité si j’en trouve une
J’ai enfin réussi à trouver une solution. J’ai passé un temps fou sur ce sujet et, à mon avis, il mérite d’être intégré au cœur du projet, car honnêtement, on dirait que cela devrait déjà y exister.
J’ai ajouté le code ci-dessous à mon composant de thème : il ajoute une classe « loading » au body dès que le routage commence, puis la retire dès que le routage est terminé. Peut-être que cela semble simple ou évident pour ceux qui connaissent Ember, mais il m’a fallu un temps obscène (en essayant un million de choses et en parcourant tous les fils de discussion que j’ai pu trouver ici) pour le comprendre.
Avec ce code de base en place, je peux ajouter des spinners de chargement et autres à mes différents widgets, dont le CSS et la visibilité seront pilotés par la présence ou non de la classe CSS loading sur la balise body.