ユーザーのフルネームを featured-topic の Handlebars テンプレートに注入しようとしています。テスト値をテンプレートに埋め込むことは問題なくできますが、目的の値を取得できません。以下のコードでは、「Test」の代わりにユーザーのフルネームが入った realname を返したいと考えています。
<script type="text/discourse-plugin" version="0.8">
var FeaturedTopicView = require('discourse/components/featured-topic').default;
FeaturedTopicView.reopen({
fullName: function() {
// 最後の投稿者のユーザー名を取得
let username = this.topic.last_poster.username;
// 上記で特定したユーザー名から、そのユーザーのフルネームを取得しようとする
let realname = Discourse.User.findByUsername(username).then(function(result) {
return result.name;
}).then(function(result) {
// ここでは実際の名前が取得できます!しかし、このスコープの外からはアクセスできません
console.log(result);
});
return "Test";
}.property()
});
</script>
関心のあるユーザーは最後の投稿者なので、この場合、利用可能な情報は this.topic.last_poster だけです。これには username、id、avatar_template の 3 つの値が関連付けられています。残念ながら、本当に必要なのは name です。
id または username を使用してユーザーのフルネームを検索できる何かがあることを期待していました。プロミスの概念やその使用方法にはあまり慣れていませんが、Discourse.User.findByUsername(username) を使用して概念的な検証を行いました。必要なフルネームを console.log で表示することは成功しましたが、それらはどうやらそのスコープ内に閉じ込められているようです。
私のアプローチ全体が間違っている可能性もありますが、現在の知識に基づいた最善の努力でした。
ご協力やご提案をいただければ大変幸いです。何か clarification が必要な場合は、お知らせください。