如何在函数内部引用 `api.addPosterIcon`

你好,

请问有人能建议如何在函数内部引用 api.addPosterIcon 吗?

示例:

<script type="text/discourse-plugin" version="0.8">
   api.onPageChange(url => {
       if (Discourse?.currentUser?.admin) {
           extract_associated_user_data();
       }
   });
   function extract_associated_user_data() {
       // 上方有很多代码,现在准备调用 `addPosterIcon` 函数
       api.addPosterIcon(function(data, attrs) {
            return { icon: 'user', className: 'customer' };       
       });
   }
</script>

如果将 api.addPosterIcon 移到顶层,它可以正常工作;但在 extract_associated_user_data 内部运行时,它却静默地没有任何反应(未执行)。也许 this 在内部被弄乱了,但我不确定该如何引用它。在发帖之前我已经尝试了很多方法。

希望这对未来的开发者读者也有帮助。

我们运行的是最新版本的 Discourse 2.8.0.beta6 (cba8b39607)。

text/discourse-plugin 代码片段在主题中的实现方式如下:

我并未直接看到此处提及 this 实例,这意味着它与 JavaScript 的隐式 this 无关;同时,由于该片段是直接粘贴进去的,也不可能是 api 超出作用域的问题。

这个最小示例真的能运行吗?也就是说,问题是否出在被省略的代码上?

顺便一提:这里的 Discourse 全局变量及其 currentUser 字段也可以替换为 api.getCurrentUser()

太好了,谢谢。

我想知道为什么 api.getCurrentUser() 在函数内部能正常工作,而 api.addPosterIcon 却不行?

我希望尽可能多地使用原生 API,而不是编写自定义代码解决方案(这本身完全不是问题)。