Подскажите, пожалуйста, как обратиться к 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, что подразумевает, что это не связано с неявным this в JavaScript, и это также не может быть выходом api за пределы области видимости, поскольку сниппет вставлен непосредственно туда.
Действительно ли этот минимальный пример работает, или проблема заключается в пропущенном коде?
Кстати: глобальный объект Discourse и его поле currentUser здесь также можно заменить на api.getCurrentUser():