Difficoltà a sovrascrivere la funzione save() nella pagina delle badge admin

Sto scrivendo un plugin per estendere la funzionalità dei badge. Quando viene premuto il pulsante “salva” nella pagina dei badge dell’amministratore, voglio eseguire del codice aggiuntivo.

Javascript di Discourse:

Hbs di Discourse:

Il mio codice 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!!");  
    });
  }
};

È un inizializzatore.

  • La finestra di alert "Hello! I am an alert box!!" viene attivata, indicando che il codice viene eseguito al ricaricamento.
  • Né le righe console.log né gli alert vengono eseguiti al salvataggio, indicando che l’override non sta funzionando?
  • Il nome del controller non genera un errore controller:admin-badges/show (ma l’aggiunta intenzionale di un errore di battitura lo fa, suggerendo che sto puntando a un controller reale)

Dovrebbe essere facile da riprodurre dato che si tratta di un solo inizializzatore. Cosa sto sbagliando???

Ciao @piffy. Sfortunatamente, questa è un’incompatibilità con la ‘sintassi delle classi native’ di JS, la funzionalità reopen() di EmberObjects e il decoratore @action (che tecnicamente crea un ‘getter’ nativo di JS).

Temo di non avere un suggerimento immediato per far funzionare questa particolare sovrascrittura, ma stiamo lavorando a una soluzione più robusta per il futuro.

A seconda di ciò che stai cercando di fare, forse agganciarsi alla funzione “save” del modello badge potrebbe funzionare?

3 Mi Piace

Grazie per la risposta rapida e completa. Darò un’occhiata all’altra funzione di salvataggio.

3 Mi Piace

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