Schwierigkeiten beim Überschreiben der save()-Funktion auf der Admin-Badge-Seite

Ich schreibe ein Plugin, um die Badge-Funktionalität zu erweitern. Wenn auf der Admin-Badge-Seite die Schaltfläche „Speichern“ gedrückt wird, möchte ich zusätzlichen Code ausführen.

Discourse Javascript:

Discourse hbs:

Mein Code discourse/plugins/discourse-badge-extension/assets/javascripts/discourse/initializers/modify-admin-badges-show-controller.js:

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

export default {
  name: 'modify-admin-badges-show',

  initialize() {

    withPluginApi('0.8', api => {
      api.modifyClass('controller:admin-badges/show', {
        pluginId: 'discourse-badge-extension',
        actions: {

          save() {
            console.log("Custom pre-save logic triggered");
            alert("Pre-save logic");

            this._super(...arguments); // Call the original save method

            console.log("Post-save logic triggered");
            alert("Post-save logic");
          },
        }
      });

      alert("Hello! I am an alert box!!");
    });
  }
};

Es ist ein Initialisierer.

  • Die Alert-Box "Hello! I am an alert box!!" wird ausgelöst, was darauf hindeutet, dass der Code beim Neuladen ausgeführt wird.
  • Weder die console.log-Zeilen noch die Alerts werden beim Speichern ausgeführt, was darauf hindeutet, dass die Überschreibung nicht funktioniert?
  • Der Controller-Name gibt keinen Fehler aus controller:admin-badges/show (aber das absichtliche Hinzufügen eines Tippfehlers tut es, was darauf hindeutet, dass ich einen echten Controller anspreche)

Es sollte einfach zu reproduzieren sein, da es sich nur um einen Initialisierer handelt. Was mache ich falsch???

Hallo @piffy. Leider ist dies eine Inkompatibilität mit der JS ‘Native class syntax’, der reopen()-Funktionalität von EmberObjects und dem @action-Decorator (der technisch gesehen einen nativen JS ‘Getter’ erstellt).

Ich habe leider keinen sofortigen Vorschlag, wie dieser spezielle Override funktionieren könnte, aber wir arbeiten an einer robusteren Lösung für die Zukunft.

Je nachdem, was Sie tun möchten, könnte das Einhaken in die “save”-Funktion des Badge-Modells funktionieren?

3 „Gefällt mir“

Vielen Dank für die schnelle und umfassende Antwort. Ich werde mich mit dieser anderen Speicherfunktion befassen.

3 „Gefällt mir“

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.