在 admin badge page 重写 save() 函数遇到困难

我正在编写一个插件来扩展徽章功能。当管理员徽章页面上的“保存”按钮被按下时,我想执行一些额外的代码。

Discourse Javascript:

Discourse hbs:

我的代码 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!!");  
    });
  }
};

这是一个初始化器。

  • 警告框 "Hello! I am an alert box!! 被触发,表明代码在重新加载时正在运行。
  • 保存时,console.log 行或警告框均未运行,表明覆盖不起作用?
  • 控制器名称 controller:admin-badges/show 不会引发错误(但故意添加拼写错误会引发错误,这表明我正在定位一个真实的控制器)

鉴于这只是一个初始化器,应该很容易重现。我哪里做错了??

@piffy。不幸的是,这与 JS 的“原生类语法”、EmberObjects 的 reopen() 功能以及 @action 装饰器(它实际上创建了一个原生的 JS“getter”)不兼容。

恐怕我没有立即的建议来让这个特定的覆盖生效,但我们正在努力为未来提供一个更健壮的解决方案。

这取决于您想做什么,也许挂钩到 badge 模型的“save”函数可以起作用?

3 个赞

感谢您快速而全面的答复。我将研究那个其他的保存功能。

3 个赞

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