Difficulté à remplacer la fonction save() sur la page de badge admin

J’écris un plugin pour étendre la fonctionnalité des badges. Lorsque le bouton « Enregistrer » est pressé sur la page d’administration des badges, je veux exécuter du code supplémentaire.

Javascript Discourse :

Hbs Discourse :

Mon 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!!");  
    });
  }
};

C’est un initialiseur.

  • La boîte d’alerte "Hello! I am an alert box!!" est déclenchée, indiquant que le code est exécuté au rechargement.
  • Ni les lignes console.log ni les alertes ne s’exécutent lors de l’enregistrement, ce qui indique que le remplacement ne fonctionne pas ?
  • Le nom du contrôleur ne génère pas d’erreur controller:admin-badges/show (mais une faute de frappe intentionnelle en génère une, suggérant que je cible un vrai contrôleur)

Il devrait être facile à reproduire étant donné qu’il s’agit d’un seul initialiseur. Qu’est-ce que je fais de mal ???

Salut @piffy. Malheureusement, il s’agit d’une incompatibilité entre la « syntaxe de classe native » de JS, la fonctionnalité reopen() d’EmberObjects et le décorateur @action (qui, techniquement, crée un « getter » natif JS).

Je crains de ne pas avoir de suggestion immédiate pour faire fonctionner cette surcharge particulière, mais nous travaillons sur une solution plus robuste pour l’avenir.

Selon ce que vous essayez de faire, peut-être que s’accrocher à la fonction « save » du modèle de badge pourrait fonctionner ?

3 « J'aime »

Merci pour votre réponse rapide et complète. Je vais me pencher sur cette autre fonction de sauvegarde.

3 « J'aime »

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