Alguém poderia, por favor, orientar como referenciar api.addPosterIcon de dentro de uma função?
Exemplo:
<script type="text/discourse-plugin" version="0.8">
api.onPageChange(url => {
if (Discourse?.currentUser?.admin) {
extract_associated_user_data();
}
});
function extract_associated_user_data() {
// muito código acima, e agora estamos prontos para chamar a função `addPosterIcon`
api.addPosterIcon(function(data, attrs) {
return { icon: 'user', className: 'customer' };
});
}
</script>
Se api.addPosterIcon for movido para o nível superior, funciona. No entanto, quando executado de dentro de extract_associated_user_data, ele simplesmente não faz nada (não é executado). Talvez this esteja sendo corrompido internamente, mas não tenho certeza de como referenciá-lo de qualquer forma. Já tentei muitas coisas antes de postar isso.
Espero que isso também seja útil para futuros desenvolvedores leitores.
Executamos a versão mais recente do Discourse 2.8.0.beta6 (cba8b39607).
A implementação de trechos de text/discourse-plugin em temas parece ser a seguinte:
Não estou vendo nenhuma menção direta a uma instância this aqui, o que implicaria que não está relacionada ao this implícito do JS, nem pode ser o api saindo do escopo, já que o trecho é colado ali.
Esse exemplo mínimo realmente funciona, ou seja, não é um problema com o código omitido?
A propósito: o global Discourse e seu campo currentUser também poderiam ser substituídos por api.getCurrentUser() aqui: