Tengo dificultades para anular la función save() en la página de insignias de administrador

Estoy escribiendo un plugin para extender la funcionalidad de las insignias. Cuando se presiona el botón “guardar” en la página de administración de insignias, quiero ejecutar código adicional.

Javascript de Discourse:

Hbs de Discourse:

Mi código 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 un inicializador.

  • El cuadro de alerta "Hello! I am an alert box!!" se activa, lo que indica que el código se está ejecutando al recargar.
  • Ni las líneas de console.log ni las alertas se ejecutan al guardar, lo que indica que la anulación no está funcionando.
  • El nombre del controlador no genera un error controller:admin-badges/show (pero añadir intencionalmente un error tipográfico sí lo hace, lo que sugiere que estoy apuntando a un controlador real).

Debería ser fácil de reproducir dado que es solo un inicializador. ¿Qué estoy haciendo mal?

Hola @piffy. Desafortunadamente, esto es una incompatibilidad con la ‘sintaxis de clase nativa’ de JS, la funcionalidad reopen() de EmberObjects y el decorador @action (que técnicamente crea un ‘getter’ nativo de JS).

Me temo que no tengo una sugerencia inmediata para que esta anulación en particular funcione, pero estamos trabajando en una solución más robusta para el futuro.

Dependiendo de lo que estés intentando hacer, ¿tal vez conectarse a la función “guardar” del modelo de insignia podría funcionar?

3 Me gusta

Gracias por la respuesta rápida y completa. Investigaré esa otra función de guardado.

3 Me gusta

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