Как добавить действие для кнопки в плагине

Я хочу создать плагин, который отображает кнопку и выполняет какое-то действие. Кнопка уже может отображаться в нужном месте, но я не знаю, как создать для неё пользовательское действие. Структура файлов выглядит следующим образом:

plugins/discourse-my-plugin
├── assets
│   ├── javascripts
│   │   └── discourse
│   │       ├── initializers
│   │       │   └── my-plugin.js.es6
│   │       └── templates
│   │           └── connectors
│   │               └── user-messages-nav
│   │                   ├── actions.js.es6
│   │                   └── button.hbs
├── config
└── plugin.rb

initializers/my-plugin.js.es6

import { withPluginApi } from "discourse/lib/plugin-api";

function initializeButton(api) {
  api.decoratePluginOutlet('user-messages-nav', (elem, args) => {
    ...
  });
}
export default {
  name: "my-button",
  initialize() {
    withPluginApi("0.8.31", initializeButton);
  }
};

button.hbs

{{d-button class="btn-primary" action="submitContent" label="submit_content"}}

Правильно ли создавать моё пользовательское действие в actions.js.es6 таким образом? Возникает ошибка: “had no action handler for: submitContent” (не найден обработчик действия: submitContent). Как это исправить?

export default {
  actions: {
    submitContent() {
      ...
    }
  }
};

Вы были очень близки :+1:

Вам нужно только изменить имя файла. И файлы .hbs, и js.es6 в вашем классе коннектора должны иметь одинаковое имя. Так что, если вы измените

actions.js.es6

на

button.js.es6

это должно сработать. Подробнее о классах коннекторов можно прочитать здесь

Спасибо, Джо, всё работает как по маслу!