Sto cercando di iniettare il nome completo di un utente nel template Handlebars dell’argomento in evidenza. Non ho problemi a inserire un valore di test nel template, ma non riesco a ottenere il valore che desidero. Nel codice sottostante, idealmente vorrei restituire realname con il nome completo dell’utente al posto di “Test”:
<script type="text/discourse-plugin" version="0.8">
var FeaturedTopicView = require('discourse/components/featured-topic').default;
FeaturedTopicView.reopen({
fullName: function() {
// Ottieni il nome utente dell'ultimo autore
let username = this.topic.last_poster.username;
// Prova a ottenere il nome completo dell'utente con il nome utente stabilito sopra
let realname = Discourse.User.findByUsername(username).then(function(result) {
return result.name;
}).then(function(result) {
// Questo ci restituisce i nomi reali! Ma sono inaccessibili fuori da qui
console.log(result);
});
return "Test";
}.property()
});
</script>
L’utente che mi interessa è l’ultimo autore, quindi in questo caso sembra che tutto ciò con cui posso lavorare sia this.topic.last_poster. Questo ha tre valori associati: username, id e avatar_template. Purtroppo ciò che mi serve davvero è name.
Speravo ci fosse qualcosa che mi permettesse di cercare il nome completo di un utente usando id o username. Non sono molto familiare con il concetto di promesse e su come utilizzarle, ma ho in qualche modo dimostrato un concetto usando Discourse.User.findByUsername(username). Posso eseguire correttamente console.log sui nomi completi di cui ho bisogno, ma sembrano intrappolati in quel scope.
Potrei stare procedendo in modo sbagliato, ma questo è stato il mio miglior sforzo basato sulle mie conoscenze attuali.
Qualsiasi aiuto o suggerimento sarebbe molto apprezzato! Fate sapere se devo chiarire qualcosa.