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 ???