Qualcuno può gentilmente consigliare come riferirsi a api.addPosterIcon all’interno di una funzione?
Esempio:
<script type="text/discourse-plugin" version="0.8">
api.onPageChange(url => {
if (Discourse?.currentUser?.admin) {
extract_associated_user_data();
}
});
function extract_associated_user_data() {
// molto codice sopra, e ora siamo pronti a chiamare la funzione `addPosterIcon`
api.addPosterIcon(function(data, attrs) {
return { icon: 'user', className: 'customer' };
});
}
</script>
Se api.addPosterIcon viene spostato al livello superiore, funziona; tuttavia, quando viene eseguito all’interno di extract_associated_user_data, semplicemente non fa nulla (non viene eseguito). Forse this viene gestito in modo errato internamente, ma non sono sicuro di come riferirsi ad esso. Ho provato molte cose prima di pubblicare questa domanda.
Spero che ciò possa essere utile anche per i futuri sviluppatori lettori.
Stiamo eseguendo l’ultima versione di Discourse 2.8.0.beta6 (cba8b39607).
L’implementazione degli snippet text/discourse-plugin nei temi è apparentemente la seguente:
Non vedo alcun riferimento diretto a un’istanza this qui, il che implicherebbe che non è correlato all’this implicito di JS, né può essere api che esce dallo scope, dato che lo snippet viene incollato lì.
Funziona effettivamente questo esempio minimale, ovvero non è un problema legato al codice omesso?
FWIW: anche il globale Discourse e il suo campo currentUser potrebbero essere sostituiti con api.getCurrentUser() qui:
Mi chiedo perché api.getCurrentUser() funzioni perfettamente all’interno della funzione, mentre api.addPosterIcon ancora no?
Vorrei provare a utilizzare l’API nativa il più possibile, piuttosto che scrivere soluzioni di codice personalizzate (il che non è affatto un problema).