Comment faire référence à `api.addPosterIcon` depuis l'intérieur d'une fonction

Bonjour,

Pourriez-vous s’il vous plaît indiquer comment faire référence à api.addPosterIcon depuis l’intérieur d’une fonction ?

Exemple :

<script type="text/discourse-plugin" version="0.8">
   api.onPageChange(url => {
       if (Discourse?.currentUser?.admin) {
           extract_associated_user_data();
       }
   });
   function extract_associated_user_data() {
       // beaucoup de code ci-dessus, et nous sommes maintenant prêts à appeler la fonction `addPosterIcon`
       api.addPosterIcon(function(data, attrs) {
            return { icon: 'user', className: 'customer' };       
       });
   }
</script>

Si api.addPosterIcon est déplacé au niveau supérieur, cela fonctionne, mais lorsqu’il est exécuté depuis l’intérieur de extract_associated_user_data, il ne fait tout simplement rien (ne s’exécute pas) sans aucun message d’erreur. Peut-être que this est perturbé en interne, mais je ne suis pas sûr de comment y faire référence. J’ai essayé beaucoup de choses avant de poster.

J’espère que cela sera également utile pour les futurs lecteurs développeurs.

Nous utilisons la dernière version de Discourse 2.8.0.beta6 (cba8b39607).

L’implémentation des extraits de text/discourse-plugin dans les thèmes semble être la suivante :

Je ne vois aucune mention directe d’une instance this ici, ce qui impliquerait qu’il ne s’agit pas du this implicite de JS, ni que api sort de sa portée, car l’extrait est collé directement là.

Cet exemple minimal fonctionne-t-il réellement, ou le problème vient-il du code omis ?

À titre d’information : le global Discourse et son champ currentUser pourraient également être remplacés par api.getCurrentUser() ici :

Super, merci.

Je me demande pourquoi api.getCurrentUser() fonctionne parfaitement à l’intérieur de la fonction, alors que api.addPosterIcon ne fonctionne toujours pas ?

J’aimerais essayer d’utiliser l’API native autant que possible plutôt que d’écrire des solutions de code personnalisées (ce qui n’est pas un problème du tout).