So fügen Sie eine Aktion für eine Schaltfläche in einem Plugin hinzu

Ich möchte ein Plugin erstellen, das einen Button anzeigt und eine Aktion ausführt. Der Button kann bereits an der gewünschten Stelle angezeigt werden, aber ich weiß nicht, wie ich eine benutzerdefinierte Aktion dafür erstelle. Die Dateistruktur sieht wie folgt aus:

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

Ist es korrekt, meine benutzerdefinierte Aktion wie folgt in actions.js.es6 zu erstellen? Der Fehler lautet: „had no action handler for: submitContent“, aber wie kann ich ihn beheben?

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

Du warst sehr nah dran :+1:

Du musst nur den Dateinamen ändern. Sowohl die .hbs- als auch die js.es6-Datei in deiner Connector-Klasse müssen denselben Namen haben. Wenn du also

actions.js.es6

in

button.js.es6

änderst, sollte es funktionieren. Weitere Informationen zu Connector-Klassen findest du hier:

Danke, Joe, das funktioniert einwandfrei!