Come aggiungere un'azione per un pulsante in un plugin

Voglio creare un plugin per mostrare un pulsante ed eseguire un’azione. Il pulsante può già essere visualizzato nel luogo desiderato, ma non so come creare un’azione personalizzata per esso. La struttura dei file è la seguente:

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

È corretto creare la mia azione personalizzata in questo modo in actions.js.es6? L’errore è “had no action handler for: submitContent” ma come posso risolverlo?

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

Sei stato molto vicino :+1:

Devi solo cambiare il nome del file. Sia il file .hbs che il file js.es6 nella tua classe connector devono avere lo stesso nome. Quindi, se cambi

actions.js.es6

in

button.js.es6

dovrebbe funzionare. Puoi leggere ulteriori informazioni sulle classi connector qui

Grazie Joe, funziona alla perfezione!