Tendo dificuldade em substituir a função save() na página de crachá do administrador

Estou escrevendo um plugin para estender a funcionalidade de distintivos. Quando o botão “salvar” é pressionado na página de distintivos do administrador, quero executar algum código adicional.

Javascript do Discourse:

Hbs do Discourse:

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

É um inicializador.

  • A caixa de alerta "Hello! I am an alert box!!" é acionada, indicando que o código está sendo executado ao recarregar.
  • Nem as linhas console.log nem os alertas são executados ao salvar, indicando que a substituição não está funcionando?
  • o nome do controller não gera erro controller:admin-badges/show (mas adicionar intencionalmente um erro de digitação o faz, sugerindo que estou visando um controller real)

Deve ser fácil de reproduzir, já que é apenas um inicializador. O que estou fazendo de errado???

Olá @piffy. Infelizmente, isso é uma incompatibilidade com a ‘sintaxe de classe nativa’ do JS, a funcionalidade reopen() do EmberObjects e o decorador @action (que tecnicamente cria um ‘getter’ nativo do JS).

Receio não ter uma sugestão imediata para fazer este override em particular funcionar, mas estamos trabalhando em uma solução mais robusta para o futuro.

Dependendo do que você está tentando fazer, talvez conectar-se à função “save” do modelo de badge possa funcionar?

3 curtidas

Obrigado pela resposta rápida e completa. Vou verificar essa outra função de salvar.

3 curtidas

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