Comment ajouter une action pour un bouton dans un plugin

Je souhaite créer un plugin pour afficher un bouton et exécuter une action. Le bouton peut déjà être affiché à l’endroit souhaité, mais je ne sais pas comment créer une action personnalisée pour lui. La structure des fichiers est la suivante :

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"}}

Est-il correct de créer ma action personnalisée comme ceci dans actions.js.es6 ? L’erreur est “had no action handler for: submitContent”, mais comment puis-je la corriger ?

export default {
  actions: {
    submitContent() {
      ...
    }
  }
};
2 « J'aime »

Vous étiez très proche :+1:

Il vous suffit de modifier le nom du fichier. Les fichiers .hbs et js.es6 de votre classe de connecteur doivent avoir le même nom. Ainsi, si vous remplacez

actions.js.es6

par

button.js.es6

cela devrait fonctionner. Vous pouvez en savoir plus sur les classes de connecteur ici

7 « J'aime »

Merci Joe, ça fonctionne à merveille !

3 « J'aime »