Можно ли передать параметры из шаблона в действие виджета?

Продолжаем обсуждение из Руководства разработчика по темам Discourse:

Дорогие друзья,

Меня интересует, можно ли передавать параметры из шаблона в действие. В руководстве от @Johani я не нашёл ни утвердительного, ни отрицательного ответа. Моя цель — сгенерировать несколько виджетов из шаблона, при этом действие каждого из них должно знать параметр цикла {{#each}}.

Пример: после выбора кнопки с многовариантным выбором уведомлений по категориям:

<script type="text/x-handlebars" data-template-name="components/some_component">
{{#each categories as |c|}}
    {{category-notifications-button
        value=c.notification_level
        category=c
        onChange=(action "changeCategoryNotificationLevel" ***как-то передать c как параметр***)
    }}
{{/each}}
</script>
<script type="text/discourse-plugin" version="0.8">
  api.modifyClass("controller:some_component", {
    actions: {
      changeCategoryNotificationLevel(selected_value, ***c как параметр***) {
        c_as_a_parameter.setNotification(notificationLevel);
      }
    }
  }
});
</script>

Есть ли способ внутри changeCategoryNotificationLevel узнать, о какой категории идёт речь из шаблона?

Если нет, и если я достаточно точно описал свою проблему, не могли бы вы предложить другой способ достижения той же цели?

Заранее спасибо

Я не смог найти ничего общего с этой проблемой, но смог обойти её с помощью

{{#each categories as |c|}}
    {{category-notifications-button
        ...
        onChange=(action (mut c.notification_level))
    }}
{{/each}}

что, я полагаю, означает, что я хочу изменить поле c.notification_level на значение, возвращаемое кнопкой.

На самом деле моя проблема не решается описанным выше способом:

  • да, уровень уведомлений был изменён, но…
  • изменения не сохранялись. Чтобы сохранить их, нужно было кликнуть в другом месте, выполнив другое действие.

Путём интенсивного поиска случайных ключевых слов в базе кода GitHub я нашёл структуру вроде этой:
{{d-button action=(action "up" wc) ...}}.

В результате тестирования я пришёл к выводу, что всё работает следующим образом:

  • шаблон:
    {{d-button action=(action "nameoftheaction" arg1 arg2) ...}}`.
    
  • JS:
    api.modifyClass("component:some-component", {
        actions: {
            nameoftheaction(arg1, arg2, argA, argB) {
                console.log(arg1);
                console.log(arg2);
                console.log(argA);
                console.log(argB);
            }
        }
    })
    

Первые аргументы методов arg1, arg2 передаются из шаблона. Остальные аргументы argA, argB и т. д. могут определяться спецификой компонента (например, category-notifications-button возвращает целое число в зависимости от настройки, на которую нажал пользователь).

Я абсолютно не уверен, что всё описано верно, но это может помочь тем, кто задаёт тот же вопрос, что и я.